[vm,ffi] Avoid linking test DLLs to `dart.exe`

The `ffi_test_functions` shared library needs to access functions from
`dart_api.h` and `dart_native_api.h`, which are only available in
the Dart executable.

UNIX shared libraries can have undefined symbols, which are resolved at
runtime and can be found in the loading executable. Windows DLLs cannot
have undefined symbols, but they can be dynamically linked to an
executable (in this case `dart.exe`). This requires the DLL to be able
to find the executable at runtime.

A better solution is to include implementations for the Dart APIs in the
DLL itself, that use `GetModuleHandle(NULL)` to get a handle to the
executable and `GetProcAddress` to get the address of the function.

This is what `dart_api_win.c` does.

Fixes https://github.com/dart-lang/sdk/issues/40579
Fixes https://github.com/dart-lang/sdk/issues/59677

TEST=ci

Cq-Include-Trybots: luci.dart.try:vm-win-release-ia32-try,vm-win-debug-x64c-try,vm-win-debug-x64-try,vm-win-debug-arm64-try,vm-msvc-windows-try,vm-aot-win-debug-x64c-try,vm-aot-win-debug-x64-try,vm-aot-win-debug-arm64-try,vm-aot-win-product-x64-try,vm-aot-win-release-x64-try,vm-aot-win-release-arm64-try,pkg-win-release-try,pkg-win-release-arm64-try,dart-sdk-win-try,dart-sdk-win-arm64-try

Change-Id: I7f971a8ce21e03d18ed2967e74998f925c9236b2
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/400582
Commit-Queue: Daco Harkes <dacoharkes@google.com>
Reviewed-by: Daco Harkes <dacoharkes@google.com>
Reviewed-by: Alexander Thomas <athom@google.com>
diff --git a/PRESUBMIT.py b/PRESUBMIT.py
index 24faa35..8358789 100644
--- a/PRESUBMIT.py
+++ b/PRESUBMIT.py
@@ -529,6 +529,35 @@
     return []
 
 
+def _CheckDartApiWinCSync(input_api, output_api):
+    """Ensure that dart_api_win.c is up-to-date."""
+    GENERATOR = "runtime/tools/generate_dart_api_win_c.dart"
+    DART_API_H = "runtime/include/dart_api.h"
+    DART_NATIVe_API_H = "runtime/include/dart_native_api.h"
+
+    files = [git_file.LocalPath() for git_file in input_api.AffectedTextFiles()]
+
+    if (GENERATOR in files or DART_API_H in files or
+            DART_NATIVe_API_H in files):
+        # Run the generator with `--check-up-to-date` to see if the output is
+        # up-to-date.
+        args = [
+            "tools/sdks/dart-sdk/bin/dart",
+            GENERATOR,
+            "--check-up-to-date",
+        ]
+        try:
+            subprocess.run(args, check=True)
+        except subprocess.CalledProcessError as e:
+            return [
+                output_api.PresubmitError(
+                    f"Make sure to re-run {GENERATOR} when it or its inputs "
+                    "change.")
+            ]
+
+    return []
+
+
 def _CommonChecks(input_api, output_api):
     results = []
     results.extend(_CheckValidHostsInDEPS(input_api, output_api))
@@ -544,6 +573,7 @@
     results.extend(_CheckAnalyzerFiles(input_api, output_api))
     results.extend(_CheckNoNewObservatoryServiceTests(input_api, output_api))
     results.extend(_CheckDevCompilerSync(input_api, output_api))
+    results.extend(_CheckDartApiWinCSync(input_api, output_api))
     return results
 
 
diff --git a/runtime/bin/BUILD.gn b/runtime/bin/BUILD.gn
index d3c4e8d..bce9504 100644
--- a/runtime/bin/BUILD.gn
+++ b/runtime/bin/BUILD.gn
@@ -1123,6 +1123,9 @@
 shared_library("entrypoints_verification_test") {
   deps = [ ":dart" ]
   sources = [ "entrypoints_verification_test.cc" ]
+  if (is_win) {
+    sources += [ "dart_api_win.c" ]
+  }
   include_dirs = [ ".." ]
 }
 
@@ -1149,19 +1152,17 @@
     "ffi_test/ffi_test_functions_generated_2.cc",
     "ffi_test/ffi_test_functions_vmspecific.cc",
   ]
+
+  if (is_win) {
+    sources += [ "dart_api_win.c" ]
+  }
+
   if (is_win && current_cpu == "x64") {
     sources += [ "ffi_test/clobber_x64_win.S" ]
   } else if (!is_win) {
     sources += [ "ffi_test/clobber_$current_cpu.S" ]
   }
   include_dirs = [ ".." ]
-
-  if (is_win) {
-    # TODO(dartbug.com/40579): This wrongly links in dart.exe on precompiled.
-    libs = [ "dart.lib" ]
-    abs_root_out_dir = rebase_path(root_out_dir)
-    ldflags = [ "/LIBPATH:$abs_root_out_dir" ]
-  }
 }
 
 # DartLibFuzzer only "exists" for restricted configurations.
diff --git a/runtime/bin/dart_api_win.c b/runtime/bin/dart_api_win.c
new file mode 100644
index 0000000..4bf4e72
--- /dev/null
+++ b/runtime/bin/dart_api_win.c
@@ -0,0 +1,2609 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// DO NOT EDIT. This file is generated by runtime/tools/generate_dart_api_win_c.dart.
+
+#include <windows.h>
+
+#include <include/dart_api.h>
+#include <include/dart_native_api.h>
+
+typedef bool (*Dart_IsErrorType)(Dart_Handle);
+typedef bool (*Dart_IsApiErrorType)(Dart_Handle);
+typedef bool (*Dart_IsUnhandledExceptionErrorType)(Dart_Handle);
+typedef bool (*Dart_IsCompilationErrorType)(Dart_Handle);
+typedef bool (*Dart_IsFatalErrorType)(Dart_Handle);
+typedef const char* (*Dart_GetErrorType)(Dart_Handle);
+typedef bool (*Dart_ErrorHasExceptionType)(Dart_Handle);
+typedef Dart_Handle (*Dart_ErrorGetExceptionType)(Dart_Handle);
+typedef Dart_Handle (*Dart_ErrorGetStackTraceType)(Dart_Handle);
+typedef Dart_Handle (*Dart_NewApiErrorType)(const char*);
+typedef Dart_Handle (*Dart_NewCompilationErrorType)(const char*);
+typedef Dart_Handle (*Dart_NewUnhandledExceptionErrorType)(Dart_Handle);
+typedef void (*Dart_PropagateErrorType)(Dart_Handle);
+typedef Dart_Handle (*Dart_ToStringType)(Dart_Handle);
+typedef bool (*Dart_IdentityEqualsType)(Dart_Handle, Dart_Handle);
+typedef Dart_Handle (*Dart_HandleFromPersistentType)(Dart_PersistentHandle);
+typedef Dart_Handle (*Dart_HandleFromWeakPersistentType)(
+    Dart_WeakPersistentHandle);
+typedef Dart_PersistentHandle (*Dart_NewPersistentHandleType)(Dart_Handle);
+typedef void (*Dart_SetPersistentHandleType)(Dart_PersistentHandle,
+                                             Dart_Handle);
+typedef void (*Dart_DeletePersistentHandleType)(Dart_PersistentHandle);
+typedef Dart_WeakPersistentHandle (*Dart_NewWeakPersistentHandleType)(
+    Dart_Handle,
+    void*,
+    intptr_t,
+    Dart_HandleFinalizer);
+typedef void (*Dart_DeleteWeakPersistentHandleType)(Dart_WeakPersistentHandle);
+typedef Dart_FinalizableHandle (*Dart_NewFinalizableHandleType)(
+    Dart_Handle,
+    void*,
+    intptr_t,
+    Dart_HandleFinalizer);
+typedef void (*Dart_DeleteFinalizableHandleType)(Dart_FinalizableHandle,
+                                                 Dart_Handle);
+typedef const char* (*Dart_VersionStringType)();
+typedef void (*Dart_IsolateFlagsInitializeType)(Dart_IsolateFlags*);
+typedef char* (*Dart_InitializeType)(Dart_InitializeParams*);
+typedef char* (*Dart_CleanupType)();
+typedef char* (*Dart_SetVMFlagsType)(int, const char**);
+typedef bool (*Dart_IsVMFlagSetType)(const char*);
+typedef Dart_Isolate (*Dart_CreateIsolateGroupType)(const char*,
+                                                    const char*,
+                                                    const uint8_t*,
+                                                    const uint8_t*,
+                                                    Dart_IsolateFlags*,
+                                                    void*,
+                                                    void*,
+                                                    char**);
+typedef Dart_Isolate (*Dart_CreateIsolateInGroupType)(
+    Dart_Isolate,
+    const char*,
+    Dart_IsolateShutdownCallback,
+    Dart_IsolateCleanupCallback,
+    void*,
+    char**);
+typedef Dart_Isolate (*Dart_CreateIsolateGroupFromKernelType)(
+    const char*,
+    const char*,
+    const uint8_t*,
+    intptr_t,
+    Dart_IsolateFlags*,
+    void*,
+    void*,
+    char**);
+typedef void (*Dart_ShutdownIsolateType)();
+typedef Dart_Isolate (*Dart_CurrentIsolateType)();
+typedef void* (*Dart_CurrentIsolateDataType)();
+typedef void* (*Dart_IsolateDataType)(Dart_Isolate);
+typedef Dart_IsolateGroup (*Dart_CurrentIsolateGroupType)();
+typedef void* (*Dart_CurrentIsolateGroupDataType)();
+typedef Dart_IsolateGroupId (*Dart_CurrentIsolateGroupIdType)();
+typedef void* (*Dart_IsolateGroupDataType)(Dart_Isolate);
+typedef Dart_Handle (*Dart_DebugNameType)();
+typedef const char* (*Dart_DebugNameToCStringType)();
+typedef const char* (*Dart_IsolateServiceIdType)(Dart_Isolate);
+typedef void (*Dart_EnterIsolateType)(Dart_Isolate);
+typedef void (*Dart_KillIsolateType)(Dart_Isolate);
+typedef void (*Dart_NotifyIdleType)(int64_t);
+typedef void (*Dart_EnableHeapSamplingType)();
+typedef void (*Dart_DisableHeapSamplingType)();
+typedef void (*Dart_RegisterHeapSamplingCallbackType)(
+    Dart_HeapSamplingCreateCallback,
+    Dart_HeapSamplingDeleteCallback);
+typedef void (*Dart_ReportSurvivingAllocationsType)(
+    Dart_HeapSamplingReportCallback,
+    void*,
+    bool);
+typedef void (*Dart_SetHeapSamplingPeriodType)(intptr_t);
+typedef void (*Dart_NotifyDestroyedType)();
+typedef void (*Dart_NotifyLowMemoryType)();
+typedef Dart_PerformanceMode (*Dart_SetPerformanceModeType)(
+    Dart_PerformanceMode);
+typedef void (*Dart_StartProfilingType)();
+typedef void (*Dart_StopProfilingType)();
+typedef void (*Dart_ThreadDisableProfilingType)();
+typedef void (*Dart_ThreadEnableProfilingType)();
+typedef void (*Dart_AddSymbolsType)(const char*, void*, intptr_t);
+typedef void (*Dart_ExitIsolateType)();
+typedef Dart_Handle (
+    *Dart_CreateSnapshotType)(uint8_t**, intptr_t*, uint8_t**, intptr_t*, bool);
+typedef bool (*Dart_IsKernelType)(const uint8_t*, intptr_t);
+typedef char* (*Dart_IsolateMakeRunnableType)(Dart_Isolate);
+typedef void (*Dart_SetMessageNotifyCallbackType)(Dart_MessageNotifyCallback);
+typedef Dart_MessageNotifyCallback (*Dart_GetMessageNotifyCallbackType)();
+typedef bool (*Dart_ShouldPauseOnStartType)();
+typedef void (*Dart_SetShouldPauseOnStartType)(bool);
+typedef bool (*Dart_IsPausedOnStartType)();
+typedef void (*Dart_SetPausedOnStartType)(bool);
+typedef bool (*Dart_ShouldPauseOnExitType)();
+typedef void (*Dart_SetShouldPauseOnExitType)(bool);
+typedef bool (*Dart_IsPausedOnExitType)();
+typedef void (*Dart_SetPausedOnExitType)(bool);
+typedef void (*Dart_SetStickyErrorType)(Dart_Handle);
+typedef bool (*Dart_HasStickyErrorType)();
+typedef Dart_Handle (*Dart_GetStickyErrorType)();
+typedef Dart_Handle (*Dart_HandleMessageType)();
+typedef bool (*Dart_HandleServiceMessagesType)();
+typedef bool (*Dart_HasServiceMessagesType)();
+typedef Dart_Handle (*Dart_RunLoopType)();
+typedef bool (*Dart_RunLoopAsyncType)(bool, Dart_Port, Dart_Port, char**);
+typedef Dart_Port (*Dart_GetMainPortIdType)();
+typedef bool (*Dart_HasLivePortsType)();
+typedef bool (*Dart_PostType)(Dart_Port, Dart_Handle);
+typedef Dart_Handle (*Dart_NewSendPortType)(Dart_Port);
+typedef Dart_Handle (*Dart_NewSendPortExType)(Dart_PortEx);
+typedef Dart_Handle (*Dart_SendPortGetIdType)(Dart_Handle, Dart_Port*);
+typedef Dart_Handle (*Dart_SendPortGetIdExType)(Dart_Handle, Dart_PortEx*);
+typedef void (*Dart_EnterScopeType)();
+typedef void (*Dart_ExitScopeType)();
+typedef uint8_t* (*Dart_ScopeAllocateType)(intptr_t);
+typedef Dart_Handle (*Dart_NullType)();
+typedef bool (*Dart_IsNullType)(Dart_Handle);
+typedef Dart_Handle (*Dart_EmptyStringType)();
+typedef Dart_Handle (*Dart_TypeDynamicType)();
+typedef Dart_Handle (*Dart_TypeVoidType)();
+typedef Dart_Handle (*Dart_TypeNeverType)();
+typedef Dart_Handle (*Dart_ObjectEqualsType)(Dart_Handle, Dart_Handle, bool*);
+typedef Dart_Handle (*Dart_ObjectIsTypeType)(Dart_Handle, Dart_Handle, bool*);
+typedef bool (*Dart_IsInstanceType)(Dart_Handle);
+typedef bool (*Dart_IsNumberType)(Dart_Handle);
+typedef bool (*Dart_IsIntegerType)(Dart_Handle);
+typedef bool (*Dart_IsDoubleType)(Dart_Handle);
+typedef bool (*Dart_IsBooleanType)(Dart_Handle);
+typedef bool (*Dart_IsStringType)(Dart_Handle);
+typedef bool (*Dart_IsStringLatin1Type)(Dart_Handle);
+typedef bool (*Dart_IsListType)(Dart_Handle);
+typedef bool (*Dart_IsMapType)(Dart_Handle);
+typedef bool (*Dart_IsLibraryType)(Dart_Handle);
+typedef bool (*Dart_IsTypeType)(Dart_Handle);
+typedef bool (*Dart_IsFunctionType)(Dart_Handle);
+typedef bool (*Dart_IsVariableType)(Dart_Handle);
+typedef bool (*Dart_IsTypeVariableType)(Dart_Handle);
+typedef bool (*Dart_IsClosureType)(Dart_Handle);
+typedef bool (*Dart_IsTypedDataType)(Dart_Handle);
+typedef bool (*Dart_IsByteBufferType)(Dart_Handle);
+typedef bool (*Dart_IsFutureType)(Dart_Handle);
+typedef Dart_Handle (*Dart_InstanceGetTypeType)(Dart_Handle);
+typedef Dart_Handle (*Dart_ClassNameType)(Dart_Handle);
+typedef Dart_Handle (*Dart_FunctionNameType)(Dart_Handle);
+typedef Dart_Handle (*Dart_FunctionOwnerType)(Dart_Handle);
+typedef Dart_Handle (*Dart_FunctionIsStaticType)(Dart_Handle, bool*);
+typedef bool (*Dart_IsTearOffType)(Dart_Handle);
+typedef Dart_Handle (*Dart_ClosureFunctionType)(Dart_Handle);
+typedef Dart_Handle (*Dart_ClassLibraryType)(Dart_Handle);
+typedef Dart_Handle (*Dart_IntegerFitsIntoInt64Type)(Dart_Handle, bool*);
+typedef Dart_Handle (*Dart_IntegerFitsIntoUint64Type)(Dart_Handle, bool*);
+typedef Dart_Handle (*Dart_NewIntegerType)(int64_t);
+typedef Dart_Handle (*Dart_NewIntegerFromUint64Type)(uint64_t);
+typedef Dart_Handle (*Dart_NewIntegerFromHexCStringType)(const char*);
+typedef Dart_Handle (*Dart_IntegerToInt64Type)(Dart_Handle, int64_t*);
+typedef Dart_Handle (*Dart_IntegerToUint64Type)(Dart_Handle, uint64_t*);
+typedef Dart_Handle (*Dart_IntegerToHexCStringType)(Dart_Handle, const char**);
+typedef Dart_Handle (*Dart_NewDoubleType)(double);
+typedef Dart_Handle (*Dart_DoubleValueType)(Dart_Handle, double*);
+typedef Dart_Handle (*Dart_GetStaticMethodClosureType)(Dart_Handle,
+                                                       Dart_Handle,
+                                                       Dart_Handle);
+typedef Dart_Handle (*Dart_TrueType)();
+typedef Dart_Handle (*Dart_FalseType)();
+typedef Dart_Handle (*Dart_NewBooleanType)(bool);
+typedef Dart_Handle (*Dart_BooleanValueType)(Dart_Handle, bool*);
+typedef Dart_Handle (*Dart_StringLengthType)(Dart_Handle, intptr_t*);
+typedef Dart_Handle (*Dart_StringUTF8LengthType)(Dart_Handle, intptr_t*);
+typedef Dart_Handle (*Dart_NewStringFromCStringType)(const char*);
+typedef Dart_Handle (*Dart_NewStringFromUTF8Type)(const uint8_t*, intptr_t);
+typedef Dart_Handle (*Dart_NewStringFromUTF16Type)(const uint16_t*, intptr_t);
+typedef Dart_Handle (*Dart_NewStringFromUTF32Type)(const int32_t*, intptr_t);
+typedef Dart_Handle (*Dart_StringToCStringType)(Dart_Handle, const char**);
+typedef Dart_Handle (*Dart_StringToUTF8Type)(Dart_Handle, uint8_t**, intptr_t*);
+typedef Dart_Handle (*Dart_CopyUTF8EncodingOfStringType)(Dart_Handle,
+                                                         uint8_t*,
+                                                         intptr_t);
+typedef Dart_Handle (*Dart_StringToLatin1Type)(Dart_Handle,
+                                               uint8_t*,
+                                               intptr_t*);
+typedef Dart_Handle (*Dart_StringToUTF16Type)(Dart_Handle,
+                                              uint16_t*,
+                                              intptr_t*);
+typedef Dart_Handle (*Dart_StringStorageSizeType)(Dart_Handle, intptr_t*);
+typedef Dart_Handle (*Dart_StringGetPropertiesType)(Dart_Handle,
+                                                    intptr_t*,
+                                                    intptr_t*,
+                                                    void**);
+typedef Dart_Handle (*Dart_NewListType)(intptr_t);
+typedef Dart_Handle (*Dart_NewListOfTypeType)(Dart_Handle, intptr_t);
+typedef Dart_Handle (*Dart_NewListOfTypeFilledType)(Dart_Handle,
+                                                    Dart_Handle,
+                                                    intptr_t);
+typedef Dart_Handle (*Dart_ListLengthType)(Dart_Handle, intptr_t*);
+typedef Dart_Handle (*Dart_ListGetAtType)(Dart_Handle, intptr_t);
+typedef Dart_Handle (*Dart_ListGetRangeType)(Dart_Handle,
+                                             intptr_t,
+                                             intptr_t,
+                                             Dart_Handle*);
+typedef Dart_Handle (*Dart_ListSetAtType)(Dart_Handle, intptr_t, Dart_Handle);
+typedef Dart_Handle (*Dart_ListGetAsBytesType)(Dart_Handle,
+                                               intptr_t,
+                                               uint8_t*,
+                                               intptr_t);
+typedef Dart_Handle (*Dart_ListSetAsBytesType)(Dart_Handle,
+                                               intptr_t,
+                                               const uint8_t*,
+                                               intptr_t);
+typedef Dart_Handle (*Dart_MapGetAtType)(Dart_Handle, Dart_Handle);
+typedef Dart_Handle (*Dart_MapContainsKeyType)(Dart_Handle, Dart_Handle);
+typedef Dart_Handle (*Dart_MapKeysType)(Dart_Handle);
+typedef Dart_TypedData_Type (*Dart_GetTypeOfTypedDataType)(Dart_Handle);
+typedef Dart_TypedData_Type (*Dart_GetTypeOfExternalTypedDataType)(Dart_Handle);
+typedef Dart_Handle (*Dart_NewTypedDataType)(Dart_TypedData_Type, intptr_t);
+typedef Dart_Handle (*Dart_NewExternalTypedDataType)(Dart_TypedData_Type,
+                                                     void*,
+                                                     intptr_t);
+typedef Dart_Handle (*Dart_NewExternalTypedDataWithFinalizerType)(
+    Dart_TypedData_Type,
+    void*,
+    intptr_t,
+    void*,
+    intptr_t,
+    Dart_HandleFinalizer);
+typedef Dart_Handle (*Dart_NewUnmodifiableExternalTypedDataWithFinalizerType)(
+    Dart_TypedData_Type,
+    const void*,
+    intptr_t,
+    void*,
+    intptr_t,
+    Dart_HandleFinalizer);
+typedef Dart_Handle (*Dart_NewByteBufferType)(Dart_Handle);
+typedef Dart_Handle (*Dart_TypedDataAcquireDataType)(Dart_Handle,
+                                                     Dart_TypedData_Type*,
+                                                     void**,
+                                                     intptr_t*);
+typedef Dart_Handle (*Dart_TypedDataReleaseDataType)(Dart_Handle);
+typedef Dart_Handle (*Dart_GetDataFromByteBufferType)(Dart_Handle);
+typedef Dart_Handle (*Dart_NewType)(Dart_Handle,
+                                    Dart_Handle,
+                                    int,
+                                    Dart_Handle*);
+typedef Dart_Handle (*Dart_AllocateType)(Dart_Handle);
+typedef Dart_Handle (*Dart_AllocateWithNativeFieldsType)(Dart_Handle,
+                                                         intptr_t,
+                                                         const intptr_t*);
+typedef Dart_Handle (*Dart_InvokeType)(Dart_Handle,
+                                       Dart_Handle,
+                                       int,
+                                       Dart_Handle*);
+typedef Dart_Handle (*Dart_InvokeClosureType)(Dart_Handle, int, Dart_Handle*);
+typedef Dart_Handle (*Dart_InvokeConstructorType)(Dart_Handle,
+                                                  Dart_Handle,
+                                                  int,
+                                                  Dart_Handle*);
+typedef Dart_Handle (*Dart_GetFieldType)(Dart_Handle, Dart_Handle);
+typedef Dart_Handle (*Dart_SetFieldType)(Dart_Handle, Dart_Handle, Dart_Handle);
+typedef Dart_Handle (*Dart_ThrowExceptionType)(Dart_Handle);
+typedef Dart_Handle (*Dart_ReThrowExceptionType)(Dart_Handle, Dart_Handle);
+typedef Dart_Handle (*Dart_GetNativeInstanceFieldCountType)(Dart_Handle, int*);
+typedef Dart_Handle (*Dart_GetNativeInstanceFieldType)(Dart_Handle,
+                                                       int,
+                                                       intptr_t*);
+typedef Dart_Handle (*Dart_SetNativeInstanceFieldType)(Dart_Handle,
+                                                       int,
+                                                       intptr_t);
+typedef void* (*Dart_GetNativeIsolateGroupDataType)(Dart_NativeArguments);
+typedef Dart_Handle (*Dart_GetNativeArgumentsType)(
+    Dart_NativeArguments,
+    int,
+    const Dart_NativeArgument_Descriptor*,
+    Dart_NativeArgument_Value*);
+typedef Dart_Handle (*Dart_GetNativeArgumentType)(Dart_NativeArguments, int);
+typedef int (*Dart_GetNativeArgumentCountType)(Dart_NativeArguments);
+typedef Dart_Handle (*Dart_GetNativeFieldsOfArgumentType)(Dart_NativeArguments,
+                                                          int,
+                                                          int,
+                                                          intptr_t*);
+typedef Dart_Handle (*Dart_GetNativeReceiverType)(Dart_NativeArguments,
+                                                  intptr_t*);
+typedef Dart_Handle (*Dart_GetNativeStringArgumentType)(Dart_NativeArguments,
+                                                        int,
+                                                        void**);
+typedef Dart_Handle (*Dart_GetNativeIntegerArgumentType)(Dart_NativeArguments,
+                                                         int,
+                                                         int64_t*);
+typedef Dart_Handle (*Dart_GetNativeBooleanArgumentType)(Dart_NativeArguments,
+                                                         int,
+                                                         bool*);
+typedef Dart_Handle (*Dart_GetNativeDoubleArgumentType)(Dart_NativeArguments,
+                                                        int,
+                                                        double*);
+typedef void (*Dart_SetReturnValueType)(Dart_NativeArguments, Dart_Handle);
+typedef void (*Dart_SetWeakHandleReturnValueType)(Dart_NativeArguments,
+                                                  Dart_WeakPersistentHandle);
+typedef void (*Dart_SetBooleanReturnValueType)(Dart_NativeArguments, bool);
+typedef void (*Dart_SetIntegerReturnValueType)(Dart_NativeArguments, int64_t);
+typedef void (*Dart_SetDoubleReturnValueType)(Dart_NativeArguments, double);
+typedef Dart_Handle (*Dart_SetEnvironmentCallbackType)(
+    Dart_EnvironmentCallback);
+typedef Dart_Handle (*Dart_SetNativeResolverType)(Dart_Handle,
+                                                  Dart_NativeEntryResolver,
+                                                  Dart_NativeEntrySymbol);
+typedef Dart_Handle (*Dart_GetNativeResolverType)(Dart_Handle,
+                                                  Dart_NativeEntryResolver*);
+typedef Dart_Handle (*Dart_GetNativeSymbolType)(Dart_Handle,
+                                                Dart_NativeEntrySymbol*);
+typedef Dart_Handle (*Dart_SetFfiNativeResolverType)(Dart_Handle,
+                                                     Dart_FfiNativeResolver);
+typedef void (*Dart_InitializeNativeAssetsResolverType)(NativeAssetsApi*);
+typedef Dart_Handle (*Dart_SetLibraryTagHandlerType)(Dart_LibraryTagHandler);
+typedef Dart_Handle (*Dart_SetDeferredLoadHandlerType)(
+    Dart_DeferredLoadHandler);
+typedef Dart_Handle (*Dart_DeferredLoadCompleteType)(intptr_t,
+                                                     const uint8_t*,
+                                                     const uint8_t*);
+typedef Dart_Handle (*Dart_DeferredLoadCompleteErrorType)(intptr_t,
+                                                          const char*,
+                                                          bool);
+typedef Dart_Handle (*Dart_LoadScriptFromKernelType)(const uint8_t*, intptr_t);
+typedef Dart_Handle (*Dart_RootLibraryType)();
+typedef Dart_Handle (*Dart_SetRootLibraryType)(Dart_Handle);
+typedef Dart_Handle (*Dart_GetTypeType)(Dart_Handle,
+                                        Dart_Handle,
+                                        intptr_t,
+                                        Dart_Handle*);
+typedef Dart_Handle (*Dart_GetNullableTypeType)(Dart_Handle,
+                                                Dart_Handle,
+                                                intptr_t,
+                                                Dart_Handle*);
+typedef Dart_Handle (*Dart_GetNonNullableTypeType)(Dart_Handle,
+                                                   Dart_Handle,
+                                                   intptr_t,
+                                                   Dart_Handle*);
+typedef Dart_Handle (*Dart_TypeToNullableTypeType)(Dart_Handle);
+typedef Dart_Handle (*Dart_TypeToNonNullableTypeType)(Dart_Handle);
+typedef Dart_Handle (*Dart_IsNullableTypeType)(Dart_Handle, bool*);
+typedef Dart_Handle (*Dart_IsNonNullableTypeType)(Dart_Handle, bool*);
+typedef Dart_Handle (*Dart_GetClassType)(Dart_Handle, Dart_Handle);
+typedef Dart_Handle (*Dart_LibraryUrlType)(Dart_Handle);
+typedef Dart_Handle (*Dart_LibraryResolvedUrlType)(Dart_Handle);
+typedef Dart_Handle (*Dart_GetLoadedLibrariesType)();
+typedef Dart_Handle (*Dart_LookupLibraryType)(Dart_Handle);
+typedef Dart_Handle (*Dart_LibraryHandleErrorType)(Dart_Handle, Dart_Handle);
+typedef Dart_Handle (*Dart_LoadLibraryFromKernelType)(const uint8_t*, intptr_t);
+typedef Dart_Handle (*Dart_LoadLibraryType)(Dart_Handle);
+typedef Dart_Handle (*Dart_FinalizeLoadingType)(bool);
+typedef Dart_Handle (*Dart_GetPeerType)(Dart_Handle, void**);
+typedef Dart_Handle (*Dart_SetPeerType)(Dart_Handle, void*);
+typedef bool (*Dart_IsKernelIsolateType)(Dart_Isolate);
+typedef bool (*Dart_KernelIsolateIsRunningType)();
+typedef Dart_Port (*Dart_KernelPortType)();
+typedef Dart_KernelCompilationResult (*Dart_CompileToKernelType)(
+    const char*,
+    const uint8_t*,
+    const intptr_t,
+    bool,
+    bool,
+    bool,
+    const char*,
+    Dart_KernelCompilationVerbosityLevel);
+typedef Dart_KernelCompilationResult (*Dart_KernelListDependenciesType)();
+typedef void (*Dart_SetDartLibrarySourcesKernelType)(const uint8_t*,
+                                                     const intptr_t);
+typedef bool (*Dart_DetectNullSafetyType)(const char*,
+                                          const char*,
+                                          const char*,
+                                          const uint8_t*,
+                                          const uint8_t*,
+                                          const uint8_t*,
+                                          intptr_t);
+typedef bool (*Dart_IsServiceIsolateType)(Dart_Isolate);
+typedef bool (*Dart_WriteProfileToTimelineType)(Dart_Port, char**);
+typedef Dart_Handle (*Dart_PrecompileType)();
+typedef Dart_Handle (*Dart_LoadingUnitLibraryUrisType)(intptr_t);
+typedef Dart_Handle (*Dart_CreateAppAOTSnapshotAsAssemblyType)(
+    Dart_StreamingWriteCallback,
+    void*,
+    bool,
+    void*);
+typedef Dart_Handle (*Dart_CreateAppAOTSnapshotAsAssembliesType)(
+    Dart_CreateLoadingUnitCallback,
+    void*,
+    bool,
+    Dart_StreamingWriteCallback,
+    Dart_StreamingCloseCallback);
+typedef Dart_Handle (*Dart_CreateAppAOTSnapshotAsElfType)(
+    Dart_StreamingWriteCallback,
+    void*,
+    bool,
+    void*);
+typedef Dart_Handle (*Dart_CreateAppAOTSnapshotAsElfsType)(
+    Dart_CreateLoadingUnitCallback,
+    void*,
+    bool,
+    Dart_StreamingWriteCallback,
+    Dart_StreamingCloseCallback);
+typedef Dart_Handle (*Dart_CreateVMAOTSnapshotAsAssemblyType)(
+    Dart_StreamingWriteCallback,
+    void*);
+typedef Dart_Handle (*Dart_SortClassesType)();
+typedef Dart_Handle (*Dart_CreateAppJITSnapshotAsBlobsType)(uint8_t**,
+                                                            intptr_t*,
+                                                            uint8_t**,
+                                                            intptr_t*);
+typedef Dart_Handle (*Dart_GetObfuscationMapType)(uint8_t**, intptr_t*);
+typedef bool (*Dart_IsPrecompiledRuntimeType)();
+typedef void (*Dart_DumpNativeStackTraceType)(void*);
+typedef void (*Dart_PrepareToAbortType)();
+typedef void (*Dart_SetDwarfStackTraceFootnoteCallbackType)(
+    Dart_DwarfStackTraceFootnoteCallback);
+typedef bool (*Dart_PostCObjectType)(Dart_Port, Dart_CObject*);
+typedef bool (*Dart_PostIntegerType)(Dart_Port, int64_t);
+typedef Dart_Port (*Dart_NewNativePortType)(const char*,
+                                            Dart_NativeMessageHandler,
+                                            bool);
+typedef Dart_Port (*Dart_NewConcurrentNativePortType)(const char*,
+                                                      Dart_NativeMessageHandler,
+                                                      intptr_t);
+typedef bool (*Dart_CloseNativePortType)(Dart_Port);
+typedef Dart_Handle (*Dart_CompileAllType)();
+typedef Dart_Handle (*Dart_FinalizeAllClassesType)();
+typedef void* (*Dart_ExecuteInternalCommandType)(const char*, void*);
+
+static Dart_IsErrorType Dart_IsErrorFn = NULL;
+static Dart_IsApiErrorType Dart_IsApiErrorFn = NULL;
+static Dart_IsUnhandledExceptionErrorType Dart_IsUnhandledExceptionErrorFn =
+    NULL;
+static Dart_IsCompilationErrorType Dart_IsCompilationErrorFn = NULL;
+static Dart_IsFatalErrorType Dart_IsFatalErrorFn = NULL;
+static Dart_GetErrorType Dart_GetErrorFn = NULL;
+static Dart_ErrorHasExceptionType Dart_ErrorHasExceptionFn = NULL;
+static Dart_ErrorGetExceptionType Dart_ErrorGetExceptionFn = NULL;
+static Dart_ErrorGetStackTraceType Dart_ErrorGetStackTraceFn = NULL;
+static Dart_NewApiErrorType Dart_NewApiErrorFn = NULL;
+static Dart_NewCompilationErrorType Dart_NewCompilationErrorFn = NULL;
+static Dart_NewUnhandledExceptionErrorType Dart_NewUnhandledExceptionErrorFn =
+    NULL;
+static Dart_PropagateErrorType Dart_PropagateErrorFn = NULL;
+static Dart_ToStringType Dart_ToStringFn = NULL;
+static Dart_IdentityEqualsType Dart_IdentityEqualsFn = NULL;
+static Dart_HandleFromPersistentType Dart_HandleFromPersistentFn = NULL;
+static Dart_HandleFromWeakPersistentType Dart_HandleFromWeakPersistentFn = NULL;
+static Dart_NewPersistentHandleType Dart_NewPersistentHandleFn = NULL;
+static Dart_SetPersistentHandleType Dart_SetPersistentHandleFn = NULL;
+static Dart_DeletePersistentHandleType Dart_DeletePersistentHandleFn = NULL;
+static Dart_NewWeakPersistentHandleType Dart_NewWeakPersistentHandleFn = NULL;
+static Dart_DeleteWeakPersistentHandleType Dart_DeleteWeakPersistentHandleFn =
+    NULL;
+static Dart_NewFinalizableHandleType Dart_NewFinalizableHandleFn = NULL;
+static Dart_DeleteFinalizableHandleType Dart_DeleteFinalizableHandleFn = NULL;
+static Dart_VersionStringType Dart_VersionStringFn = NULL;
+static Dart_IsolateFlagsInitializeType Dart_IsolateFlagsInitializeFn = NULL;
+static Dart_InitializeType Dart_InitializeFn = NULL;
+static Dart_CleanupType Dart_CleanupFn = NULL;
+static Dart_SetVMFlagsType Dart_SetVMFlagsFn = NULL;
+static Dart_IsVMFlagSetType Dart_IsVMFlagSetFn = NULL;
+static Dart_CreateIsolateGroupType Dart_CreateIsolateGroupFn = NULL;
+static Dart_CreateIsolateInGroupType Dart_CreateIsolateInGroupFn = NULL;
+static Dart_CreateIsolateGroupFromKernelType
+    Dart_CreateIsolateGroupFromKernelFn = NULL;
+static Dart_ShutdownIsolateType Dart_ShutdownIsolateFn = NULL;
+static Dart_CurrentIsolateType Dart_CurrentIsolateFn = NULL;
+static Dart_CurrentIsolateDataType Dart_CurrentIsolateDataFn = NULL;
+static Dart_IsolateDataType Dart_IsolateDataFn = NULL;
+static Dart_CurrentIsolateGroupType Dart_CurrentIsolateGroupFn = NULL;
+static Dart_CurrentIsolateGroupDataType Dart_CurrentIsolateGroupDataFn = NULL;
+static Dart_CurrentIsolateGroupIdType Dart_CurrentIsolateGroupIdFn = NULL;
+static Dart_IsolateGroupDataType Dart_IsolateGroupDataFn = NULL;
+static Dart_DebugNameType Dart_DebugNameFn = NULL;
+static Dart_DebugNameToCStringType Dart_DebugNameToCStringFn = NULL;
+static Dart_IsolateServiceIdType Dart_IsolateServiceIdFn = NULL;
+static Dart_EnterIsolateType Dart_EnterIsolateFn = NULL;
+static Dart_KillIsolateType Dart_KillIsolateFn = NULL;
+static Dart_NotifyIdleType Dart_NotifyIdleFn = NULL;
+static Dart_EnableHeapSamplingType Dart_EnableHeapSamplingFn = NULL;
+static Dart_DisableHeapSamplingType Dart_DisableHeapSamplingFn = NULL;
+static Dart_RegisterHeapSamplingCallbackType
+    Dart_RegisterHeapSamplingCallbackFn = NULL;
+static Dart_ReportSurvivingAllocationsType Dart_ReportSurvivingAllocationsFn =
+    NULL;
+static Dart_SetHeapSamplingPeriodType Dart_SetHeapSamplingPeriodFn = NULL;
+static Dart_NotifyDestroyedType Dart_NotifyDestroyedFn = NULL;
+static Dart_NotifyLowMemoryType Dart_NotifyLowMemoryFn = NULL;
+static Dart_SetPerformanceModeType Dart_SetPerformanceModeFn = NULL;
+static Dart_StartProfilingType Dart_StartProfilingFn = NULL;
+static Dart_StopProfilingType Dart_StopProfilingFn = NULL;
+static Dart_ThreadDisableProfilingType Dart_ThreadDisableProfilingFn = NULL;
+static Dart_ThreadEnableProfilingType Dart_ThreadEnableProfilingFn = NULL;
+static Dart_AddSymbolsType Dart_AddSymbolsFn = NULL;
+static Dart_ExitIsolateType Dart_ExitIsolateFn = NULL;
+static Dart_CreateSnapshotType Dart_CreateSnapshotFn = NULL;
+static Dart_IsKernelType Dart_IsKernelFn = NULL;
+static Dart_IsolateMakeRunnableType Dart_IsolateMakeRunnableFn = NULL;
+static Dart_SetMessageNotifyCallbackType Dart_SetMessageNotifyCallbackFn = NULL;
+static Dart_GetMessageNotifyCallbackType Dart_GetMessageNotifyCallbackFn = NULL;
+static Dart_ShouldPauseOnStartType Dart_ShouldPauseOnStartFn = NULL;
+static Dart_SetShouldPauseOnStartType Dart_SetShouldPauseOnStartFn = NULL;
+static Dart_IsPausedOnStartType Dart_IsPausedOnStartFn = NULL;
+static Dart_SetPausedOnStartType Dart_SetPausedOnStartFn = NULL;
+static Dart_ShouldPauseOnExitType Dart_ShouldPauseOnExitFn = NULL;
+static Dart_SetShouldPauseOnExitType Dart_SetShouldPauseOnExitFn = NULL;
+static Dart_IsPausedOnExitType Dart_IsPausedOnExitFn = NULL;
+static Dart_SetPausedOnExitType Dart_SetPausedOnExitFn = NULL;
+static Dart_SetStickyErrorType Dart_SetStickyErrorFn = NULL;
+static Dart_HasStickyErrorType Dart_HasStickyErrorFn = NULL;
+static Dart_GetStickyErrorType Dart_GetStickyErrorFn = NULL;
+static Dart_HandleMessageType Dart_HandleMessageFn = NULL;
+static Dart_HandleServiceMessagesType Dart_HandleServiceMessagesFn = NULL;
+static Dart_HasServiceMessagesType Dart_HasServiceMessagesFn = NULL;
+static Dart_RunLoopType Dart_RunLoopFn = NULL;
+static Dart_RunLoopAsyncType Dart_RunLoopAsyncFn = NULL;
+static Dart_GetMainPortIdType Dart_GetMainPortIdFn = NULL;
+static Dart_HasLivePortsType Dart_HasLivePortsFn = NULL;
+static Dart_PostType Dart_PostFn = NULL;
+static Dart_NewSendPortType Dart_NewSendPortFn = NULL;
+static Dart_NewSendPortExType Dart_NewSendPortExFn = NULL;
+static Dart_SendPortGetIdType Dart_SendPortGetIdFn = NULL;
+static Dart_SendPortGetIdExType Dart_SendPortGetIdExFn = NULL;
+static Dart_EnterScopeType Dart_EnterScopeFn = NULL;
+static Dart_ExitScopeType Dart_ExitScopeFn = NULL;
+static Dart_ScopeAllocateType Dart_ScopeAllocateFn = NULL;
+static Dart_NullType Dart_NullFn = NULL;
+static Dart_IsNullType Dart_IsNullFn = NULL;
+static Dart_EmptyStringType Dart_EmptyStringFn = NULL;
+static Dart_TypeDynamicType Dart_TypeDynamicFn = NULL;
+static Dart_TypeVoidType Dart_TypeVoidFn = NULL;
+static Dart_TypeNeverType Dart_TypeNeverFn = NULL;
+static Dart_ObjectEqualsType Dart_ObjectEqualsFn = NULL;
+static Dart_ObjectIsTypeType Dart_ObjectIsTypeFn = NULL;
+static Dart_IsInstanceType Dart_IsInstanceFn = NULL;
+static Dart_IsNumberType Dart_IsNumberFn = NULL;
+static Dart_IsIntegerType Dart_IsIntegerFn = NULL;
+static Dart_IsDoubleType Dart_IsDoubleFn = NULL;
+static Dart_IsBooleanType Dart_IsBooleanFn = NULL;
+static Dart_IsStringType Dart_IsStringFn = NULL;
+static Dart_IsStringLatin1Type Dart_IsStringLatin1Fn = NULL;
+static Dart_IsListType Dart_IsListFn = NULL;
+static Dart_IsMapType Dart_IsMapFn = NULL;
+static Dart_IsLibraryType Dart_IsLibraryFn = NULL;
+static Dart_IsTypeType Dart_IsTypeFn = NULL;
+static Dart_IsFunctionType Dart_IsFunctionFn = NULL;
+static Dart_IsVariableType Dart_IsVariableFn = NULL;
+static Dart_IsTypeVariableType Dart_IsTypeVariableFn = NULL;
+static Dart_IsClosureType Dart_IsClosureFn = NULL;
+static Dart_IsTypedDataType Dart_IsTypedDataFn = NULL;
+static Dart_IsByteBufferType Dart_IsByteBufferFn = NULL;
+static Dart_IsFutureType Dart_IsFutureFn = NULL;
+static Dart_InstanceGetTypeType Dart_InstanceGetTypeFn = NULL;
+static Dart_ClassNameType Dart_ClassNameFn = NULL;
+static Dart_FunctionNameType Dart_FunctionNameFn = NULL;
+static Dart_FunctionOwnerType Dart_FunctionOwnerFn = NULL;
+static Dart_FunctionIsStaticType Dart_FunctionIsStaticFn = NULL;
+static Dart_IsTearOffType Dart_IsTearOffFn = NULL;
+static Dart_ClosureFunctionType Dart_ClosureFunctionFn = NULL;
+static Dart_ClassLibraryType Dart_ClassLibraryFn = NULL;
+static Dart_IntegerFitsIntoInt64Type Dart_IntegerFitsIntoInt64Fn = NULL;
+static Dart_IntegerFitsIntoUint64Type Dart_IntegerFitsIntoUint64Fn = NULL;
+static Dart_NewIntegerType Dart_NewIntegerFn = NULL;
+static Dart_NewIntegerFromUint64Type Dart_NewIntegerFromUint64Fn = NULL;
+static Dart_NewIntegerFromHexCStringType Dart_NewIntegerFromHexCStringFn = NULL;
+static Dart_IntegerToInt64Type Dart_IntegerToInt64Fn = NULL;
+static Dart_IntegerToUint64Type Dart_IntegerToUint64Fn = NULL;
+static Dart_IntegerToHexCStringType Dart_IntegerToHexCStringFn = NULL;
+static Dart_NewDoubleType Dart_NewDoubleFn = NULL;
+static Dart_DoubleValueType Dart_DoubleValueFn = NULL;
+static Dart_GetStaticMethodClosureType Dart_GetStaticMethodClosureFn = NULL;
+static Dart_TrueType Dart_TrueFn = NULL;
+static Dart_FalseType Dart_FalseFn = NULL;
+static Dart_NewBooleanType Dart_NewBooleanFn = NULL;
+static Dart_BooleanValueType Dart_BooleanValueFn = NULL;
+static Dart_StringLengthType Dart_StringLengthFn = NULL;
+static Dart_StringUTF8LengthType Dart_StringUTF8LengthFn = NULL;
+static Dart_NewStringFromCStringType Dart_NewStringFromCStringFn = NULL;
+static Dart_NewStringFromUTF8Type Dart_NewStringFromUTF8Fn = NULL;
+static Dart_NewStringFromUTF16Type Dart_NewStringFromUTF16Fn = NULL;
+static Dart_NewStringFromUTF32Type Dart_NewStringFromUTF32Fn = NULL;
+static Dart_StringToCStringType Dart_StringToCStringFn = NULL;
+static Dart_StringToUTF8Type Dart_StringToUTF8Fn = NULL;
+static Dart_CopyUTF8EncodingOfStringType Dart_CopyUTF8EncodingOfStringFn = NULL;
+static Dart_StringToLatin1Type Dart_StringToLatin1Fn = NULL;
+static Dart_StringToUTF16Type Dart_StringToUTF16Fn = NULL;
+static Dart_StringStorageSizeType Dart_StringStorageSizeFn = NULL;
+static Dart_StringGetPropertiesType Dart_StringGetPropertiesFn = NULL;
+static Dart_NewListType Dart_NewListFn = NULL;
+static Dart_NewListOfTypeType Dart_NewListOfTypeFn = NULL;
+static Dart_NewListOfTypeFilledType Dart_NewListOfTypeFilledFn = NULL;
+static Dart_ListLengthType Dart_ListLengthFn = NULL;
+static Dart_ListGetAtType Dart_ListGetAtFn = NULL;
+static Dart_ListGetRangeType Dart_ListGetRangeFn = NULL;
+static Dart_ListSetAtType Dart_ListSetAtFn = NULL;
+static Dart_ListGetAsBytesType Dart_ListGetAsBytesFn = NULL;
+static Dart_ListSetAsBytesType Dart_ListSetAsBytesFn = NULL;
+static Dart_MapGetAtType Dart_MapGetAtFn = NULL;
+static Dart_MapContainsKeyType Dart_MapContainsKeyFn = NULL;
+static Dart_MapKeysType Dart_MapKeysFn = NULL;
+static Dart_GetTypeOfTypedDataType Dart_GetTypeOfTypedDataFn = NULL;
+static Dart_GetTypeOfExternalTypedDataType Dart_GetTypeOfExternalTypedDataFn =
+    NULL;
+static Dart_NewTypedDataType Dart_NewTypedDataFn = NULL;
+static Dart_NewExternalTypedDataType Dart_NewExternalTypedDataFn = NULL;
+static Dart_NewExternalTypedDataWithFinalizerType
+    Dart_NewExternalTypedDataWithFinalizerFn = NULL;
+static Dart_NewUnmodifiableExternalTypedDataWithFinalizerType
+    Dart_NewUnmodifiableExternalTypedDataWithFinalizerFn = NULL;
+static Dart_NewByteBufferType Dart_NewByteBufferFn = NULL;
+static Dart_TypedDataAcquireDataType Dart_TypedDataAcquireDataFn = NULL;
+static Dart_TypedDataReleaseDataType Dart_TypedDataReleaseDataFn = NULL;
+static Dart_GetDataFromByteBufferType Dart_GetDataFromByteBufferFn = NULL;
+static Dart_NewType Dart_NewFn = NULL;
+static Dart_AllocateType Dart_AllocateFn = NULL;
+static Dart_AllocateWithNativeFieldsType Dart_AllocateWithNativeFieldsFn = NULL;
+static Dart_InvokeType Dart_InvokeFn = NULL;
+static Dart_InvokeClosureType Dart_InvokeClosureFn = NULL;
+static Dart_InvokeConstructorType Dart_InvokeConstructorFn = NULL;
+static Dart_GetFieldType Dart_GetFieldFn = NULL;
+static Dart_SetFieldType Dart_SetFieldFn = NULL;
+static Dart_ThrowExceptionType Dart_ThrowExceptionFn = NULL;
+static Dart_ReThrowExceptionType Dart_ReThrowExceptionFn = NULL;
+static Dart_GetNativeInstanceFieldCountType Dart_GetNativeInstanceFieldCountFn =
+    NULL;
+static Dart_GetNativeInstanceFieldType Dart_GetNativeInstanceFieldFn = NULL;
+static Dart_SetNativeInstanceFieldType Dart_SetNativeInstanceFieldFn = NULL;
+static Dart_GetNativeIsolateGroupDataType Dart_GetNativeIsolateGroupDataFn =
+    NULL;
+static Dart_GetNativeArgumentsType Dart_GetNativeArgumentsFn = NULL;
+static Dart_GetNativeArgumentType Dart_GetNativeArgumentFn = NULL;
+static Dart_GetNativeArgumentCountType Dart_GetNativeArgumentCountFn = NULL;
+static Dart_GetNativeFieldsOfArgumentType Dart_GetNativeFieldsOfArgumentFn =
+    NULL;
+static Dart_GetNativeReceiverType Dart_GetNativeReceiverFn = NULL;
+static Dart_GetNativeStringArgumentType Dart_GetNativeStringArgumentFn = NULL;
+static Dart_GetNativeIntegerArgumentType Dart_GetNativeIntegerArgumentFn = NULL;
+static Dart_GetNativeBooleanArgumentType Dart_GetNativeBooleanArgumentFn = NULL;
+static Dart_GetNativeDoubleArgumentType Dart_GetNativeDoubleArgumentFn = NULL;
+static Dart_SetReturnValueType Dart_SetReturnValueFn = NULL;
+static Dart_SetWeakHandleReturnValueType Dart_SetWeakHandleReturnValueFn = NULL;
+static Dart_SetBooleanReturnValueType Dart_SetBooleanReturnValueFn = NULL;
+static Dart_SetIntegerReturnValueType Dart_SetIntegerReturnValueFn = NULL;
+static Dart_SetDoubleReturnValueType Dart_SetDoubleReturnValueFn = NULL;
+static Dart_SetEnvironmentCallbackType Dart_SetEnvironmentCallbackFn = NULL;
+static Dart_SetNativeResolverType Dart_SetNativeResolverFn = NULL;
+static Dart_GetNativeResolverType Dart_GetNativeResolverFn = NULL;
+static Dart_GetNativeSymbolType Dart_GetNativeSymbolFn = NULL;
+static Dart_SetFfiNativeResolverType Dart_SetFfiNativeResolverFn = NULL;
+static Dart_InitializeNativeAssetsResolverType
+    Dart_InitializeNativeAssetsResolverFn = NULL;
+static Dart_SetLibraryTagHandlerType Dart_SetLibraryTagHandlerFn = NULL;
+static Dart_SetDeferredLoadHandlerType Dart_SetDeferredLoadHandlerFn = NULL;
+static Dart_DeferredLoadCompleteType Dart_DeferredLoadCompleteFn = NULL;
+static Dart_DeferredLoadCompleteErrorType Dart_DeferredLoadCompleteErrorFn =
+    NULL;
+static Dart_LoadScriptFromKernelType Dart_LoadScriptFromKernelFn = NULL;
+static Dart_RootLibraryType Dart_RootLibraryFn = NULL;
+static Dart_SetRootLibraryType Dart_SetRootLibraryFn = NULL;
+static Dart_GetTypeType Dart_GetTypeFn = NULL;
+static Dart_GetNullableTypeType Dart_GetNullableTypeFn = NULL;
+static Dart_GetNonNullableTypeType Dart_GetNonNullableTypeFn = NULL;
+static Dart_TypeToNullableTypeType Dart_TypeToNullableTypeFn = NULL;
+static Dart_TypeToNonNullableTypeType Dart_TypeToNonNullableTypeFn = NULL;
+static Dart_IsNullableTypeType Dart_IsNullableTypeFn = NULL;
+static Dart_IsNonNullableTypeType Dart_IsNonNullableTypeFn = NULL;
+static Dart_GetClassType Dart_GetClassFn = NULL;
+static Dart_LibraryUrlType Dart_LibraryUrlFn = NULL;
+static Dart_LibraryResolvedUrlType Dart_LibraryResolvedUrlFn = NULL;
+static Dart_GetLoadedLibrariesType Dart_GetLoadedLibrariesFn = NULL;
+static Dart_LookupLibraryType Dart_LookupLibraryFn = NULL;
+static Dart_LibraryHandleErrorType Dart_LibraryHandleErrorFn = NULL;
+static Dart_LoadLibraryFromKernelType Dart_LoadLibraryFromKernelFn = NULL;
+static Dart_LoadLibraryType Dart_LoadLibraryFn = NULL;
+static Dart_FinalizeLoadingType Dart_FinalizeLoadingFn = NULL;
+static Dart_GetPeerType Dart_GetPeerFn = NULL;
+static Dart_SetPeerType Dart_SetPeerFn = NULL;
+static Dart_IsKernelIsolateType Dart_IsKernelIsolateFn = NULL;
+static Dart_KernelIsolateIsRunningType Dart_KernelIsolateIsRunningFn = NULL;
+static Dart_KernelPortType Dart_KernelPortFn = NULL;
+static Dart_CompileToKernelType Dart_CompileToKernelFn = NULL;
+static Dart_KernelListDependenciesType Dart_KernelListDependenciesFn = NULL;
+static Dart_SetDartLibrarySourcesKernelType Dart_SetDartLibrarySourcesKernelFn =
+    NULL;
+static Dart_DetectNullSafetyType Dart_DetectNullSafetyFn = NULL;
+static Dart_IsServiceIsolateType Dart_IsServiceIsolateFn = NULL;
+static Dart_WriteProfileToTimelineType Dart_WriteProfileToTimelineFn = NULL;
+static Dart_PrecompileType Dart_PrecompileFn = NULL;
+static Dart_LoadingUnitLibraryUrisType Dart_LoadingUnitLibraryUrisFn = NULL;
+static Dart_CreateAppAOTSnapshotAsAssemblyType
+    Dart_CreateAppAOTSnapshotAsAssemblyFn = NULL;
+static Dart_CreateAppAOTSnapshotAsAssembliesType
+    Dart_CreateAppAOTSnapshotAsAssembliesFn = NULL;
+static Dart_CreateAppAOTSnapshotAsElfType Dart_CreateAppAOTSnapshotAsElfFn =
+    NULL;
+static Dart_CreateAppAOTSnapshotAsElfsType Dart_CreateAppAOTSnapshotAsElfsFn =
+    NULL;
+static Dart_CreateVMAOTSnapshotAsAssemblyType
+    Dart_CreateVMAOTSnapshotAsAssemblyFn = NULL;
+static Dart_SortClassesType Dart_SortClassesFn = NULL;
+static Dart_CreateAppJITSnapshotAsBlobsType Dart_CreateAppJITSnapshotAsBlobsFn =
+    NULL;
+static Dart_GetObfuscationMapType Dart_GetObfuscationMapFn = NULL;
+static Dart_IsPrecompiledRuntimeType Dart_IsPrecompiledRuntimeFn = NULL;
+static Dart_DumpNativeStackTraceType Dart_DumpNativeStackTraceFn = NULL;
+static Dart_PrepareToAbortType Dart_PrepareToAbortFn = NULL;
+static Dart_SetDwarfStackTraceFootnoteCallbackType
+    Dart_SetDwarfStackTraceFootnoteCallbackFn = NULL;
+static Dart_PostCObjectType Dart_PostCObjectFn = NULL;
+static Dart_PostIntegerType Dart_PostIntegerFn = NULL;
+static Dart_NewNativePortType Dart_NewNativePortFn = NULL;
+static Dart_NewConcurrentNativePortType Dart_NewConcurrentNativePortFn = NULL;
+static Dart_CloseNativePortType Dart_CloseNativePortFn = NULL;
+static Dart_CompileAllType Dart_CompileAllFn = NULL;
+static Dart_FinalizeAllClassesType Dart_FinalizeAllClassesFn = NULL;
+static Dart_ExecuteInternalCommandType Dart_ExecuteInternalCommandFn = NULL;
+
+BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
+  if (fdwReason == DLL_PROCESS_ATTACH) {
+    HMODULE process = GetModuleHandle(NULL);
+
+    Dart_IsErrorFn = (Dart_IsErrorType)GetProcAddress(process, "Dart_IsError");
+    Dart_IsApiErrorFn =
+        (Dart_IsApiErrorType)GetProcAddress(process, "Dart_IsApiError");
+    Dart_IsUnhandledExceptionErrorFn =
+        (Dart_IsUnhandledExceptionErrorType)GetProcAddress(
+            process, "Dart_IsUnhandledExceptionError");
+    Dart_IsCompilationErrorFn = (Dart_IsCompilationErrorType)GetProcAddress(
+        process, "Dart_IsCompilationError");
+    Dart_IsFatalErrorFn =
+        (Dart_IsFatalErrorType)GetProcAddress(process, "Dart_IsFatalError");
+    Dart_GetErrorFn =
+        (Dart_GetErrorType)GetProcAddress(process, "Dart_GetError");
+    Dart_ErrorHasExceptionFn = (Dart_ErrorHasExceptionType)GetProcAddress(
+        process, "Dart_ErrorHasException");
+    Dart_ErrorGetExceptionFn = (Dart_ErrorGetExceptionType)GetProcAddress(
+        process, "Dart_ErrorGetException");
+    Dart_ErrorGetStackTraceFn = (Dart_ErrorGetStackTraceType)GetProcAddress(
+        process, "Dart_ErrorGetStackTrace");
+    Dart_NewApiErrorFn =
+        (Dart_NewApiErrorType)GetProcAddress(process, "Dart_NewApiError");
+    Dart_NewCompilationErrorFn = (Dart_NewCompilationErrorType)GetProcAddress(
+        process, "Dart_NewCompilationError");
+    Dart_NewUnhandledExceptionErrorFn =
+        (Dart_NewUnhandledExceptionErrorType)GetProcAddress(
+            process, "Dart_NewUnhandledExceptionError");
+    Dart_PropagateErrorFn =
+        (Dart_PropagateErrorType)GetProcAddress(process, "Dart_PropagateError");
+    Dart_ToStringFn =
+        (Dart_ToStringType)GetProcAddress(process, "Dart_ToString");
+    Dart_IdentityEqualsFn =
+        (Dart_IdentityEqualsType)GetProcAddress(process, "Dart_IdentityEquals");
+    Dart_HandleFromPersistentFn = (Dart_HandleFromPersistentType)GetProcAddress(
+        process, "Dart_HandleFromPersistent");
+    Dart_HandleFromWeakPersistentFn =
+        (Dart_HandleFromWeakPersistentType)GetProcAddress(
+            process, "Dart_HandleFromWeakPersistent");
+    Dart_NewPersistentHandleFn = (Dart_NewPersistentHandleType)GetProcAddress(
+        process, "Dart_NewPersistentHandle");
+    Dart_SetPersistentHandleFn = (Dart_SetPersistentHandleType)GetProcAddress(
+        process, "Dart_SetPersistentHandle");
+    Dart_DeletePersistentHandleFn =
+        (Dart_DeletePersistentHandleType)GetProcAddress(
+            process, "Dart_DeletePersistentHandle");
+    Dart_NewWeakPersistentHandleFn =
+        (Dart_NewWeakPersistentHandleType)GetProcAddress(
+            process, "Dart_NewWeakPersistentHandle");
+    Dart_DeleteWeakPersistentHandleFn =
+        (Dart_DeleteWeakPersistentHandleType)GetProcAddress(
+            process, "Dart_DeleteWeakPersistentHandle");
+    Dart_NewFinalizableHandleFn = (Dart_NewFinalizableHandleType)GetProcAddress(
+        process, "Dart_NewFinalizableHandle");
+    Dart_DeleteFinalizableHandleFn =
+        (Dart_DeleteFinalizableHandleType)GetProcAddress(
+            process, "Dart_DeleteFinalizableHandle");
+    Dart_VersionStringFn =
+        (Dart_VersionStringType)GetProcAddress(process, "Dart_VersionString");
+    Dart_IsolateFlagsInitializeFn =
+        (Dart_IsolateFlagsInitializeType)GetProcAddress(
+            process, "Dart_IsolateFlagsInitialize");
+    Dart_InitializeFn =
+        (Dart_InitializeType)GetProcAddress(process, "Dart_Initialize");
+    Dart_CleanupFn = (Dart_CleanupType)GetProcAddress(process, "Dart_Cleanup");
+    Dart_SetVMFlagsFn =
+        (Dart_SetVMFlagsType)GetProcAddress(process, "Dart_SetVMFlags");
+    Dart_IsVMFlagSetFn =
+        (Dart_IsVMFlagSetType)GetProcAddress(process, "Dart_IsVMFlagSet");
+    Dart_CreateIsolateGroupFn = (Dart_CreateIsolateGroupType)GetProcAddress(
+        process, "Dart_CreateIsolateGroup");
+    Dart_CreateIsolateInGroupFn = (Dart_CreateIsolateInGroupType)GetProcAddress(
+        process, "Dart_CreateIsolateInGroup");
+    Dart_CreateIsolateGroupFromKernelFn =
+        (Dart_CreateIsolateGroupFromKernelType)GetProcAddress(
+            process, "Dart_CreateIsolateGroupFromKernel");
+    Dart_ShutdownIsolateFn = (Dart_ShutdownIsolateType)GetProcAddress(
+        process, "Dart_ShutdownIsolate");
+    Dart_CurrentIsolateFn =
+        (Dart_CurrentIsolateType)GetProcAddress(process, "Dart_CurrentIsolate");
+    Dart_CurrentIsolateDataFn = (Dart_CurrentIsolateDataType)GetProcAddress(
+        process, "Dart_CurrentIsolateData");
+    Dart_IsolateDataFn =
+        (Dart_IsolateDataType)GetProcAddress(process, "Dart_IsolateData");
+    Dart_CurrentIsolateGroupFn = (Dart_CurrentIsolateGroupType)GetProcAddress(
+        process, "Dart_CurrentIsolateGroup");
+    Dart_CurrentIsolateGroupDataFn =
+        (Dart_CurrentIsolateGroupDataType)GetProcAddress(
+            process, "Dart_CurrentIsolateGroupData");
+    Dart_CurrentIsolateGroupIdFn =
+        (Dart_CurrentIsolateGroupIdType)GetProcAddress(
+            process, "Dart_CurrentIsolateGroupId");
+    Dart_IsolateGroupDataFn = (Dart_IsolateGroupDataType)GetProcAddress(
+        process, "Dart_IsolateGroupData");
+    Dart_DebugNameFn =
+        (Dart_DebugNameType)GetProcAddress(process, "Dart_DebugName");
+    Dart_DebugNameToCStringFn = (Dart_DebugNameToCStringType)GetProcAddress(
+        process, "Dart_DebugNameToCString");
+    Dart_IsolateServiceIdFn = (Dart_IsolateServiceIdType)GetProcAddress(
+        process, "Dart_IsolateServiceId");
+    Dart_EnterIsolateFn =
+        (Dart_EnterIsolateType)GetProcAddress(process, "Dart_EnterIsolate");
+    Dart_KillIsolateFn =
+        (Dart_KillIsolateType)GetProcAddress(process, "Dart_KillIsolate");
+    Dart_NotifyIdleFn =
+        (Dart_NotifyIdleType)GetProcAddress(process, "Dart_NotifyIdle");
+    Dart_EnableHeapSamplingFn = (Dart_EnableHeapSamplingType)GetProcAddress(
+        process, "Dart_EnableHeapSampling");
+    Dart_DisableHeapSamplingFn = (Dart_DisableHeapSamplingType)GetProcAddress(
+        process, "Dart_DisableHeapSampling");
+    Dart_RegisterHeapSamplingCallbackFn =
+        (Dart_RegisterHeapSamplingCallbackType)GetProcAddress(
+            process, "Dart_RegisterHeapSamplingCallback");
+    Dart_ReportSurvivingAllocationsFn =
+        (Dart_ReportSurvivingAllocationsType)GetProcAddress(
+            process, "Dart_ReportSurvivingAllocations");
+    Dart_SetHeapSamplingPeriodFn =
+        (Dart_SetHeapSamplingPeriodType)GetProcAddress(
+            process, "Dart_SetHeapSamplingPeriod");
+    Dart_NotifyDestroyedFn = (Dart_NotifyDestroyedType)GetProcAddress(
+        process, "Dart_NotifyDestroyed");
+    Dart_NotifyLowMemoryFn = (Dart_NotifyLowMemoryType)GetProcAddress(
+        process, "Dart_NotifyLowMemory");
+    Dart_SetPerformanceModeFn = (Dart_SetPerformanceModeType)GetProcAddress(
+        process, "Dart_SetPerformanceMode");
+    Dart_StartProfilingFn =
+        (Dart_StartProfilingType)GetProcAddress(process, "Dart_StartProfiling");
+    Dart_StopProfilingFn =
+        (Dart_StopProfilingType)GetProcAddress(process, "Dart_StopProfiling");
+    Dart_ThreadDisableProfilingFn =
+        (Dart_ThreadDisableProfilingType)GetProcAddress(
+            process, "Dart_ThreadDisableProfiling");
+    Dart_ThreadEnableProfilingFn =
+        (Dart_ThreadEnableProfilingType)GetProcAddress(
+            process, "Dart_ThreadEnableProfiling");
+    Dart_AddSymbolsFn =
+        (Dart_AddSymbolsType)GetProcAddress(process, "Dart_AddSymbols");
+    Dart_ExitIsolateFn =
+        (Dart_ExitIsolateType)GetProcAddress(process, "Dart_ExitIsolate");
+    Dart_CreateSnapshotFn =
+        (Dart_CreateSnapshotType)GetProcAddress(process, "Dart_CreateSnapshot");
+    Dart_IsKernelFn =
+        (Dart_IsKernelType)GetProcAddress(process, "Dart_IsKernel");
+    Dart_IsolateMakeRunnableFn = (Dart_IsolateMakeRunnableType)GetProcAddress(
+        process, "Dart_IsolateMakeRunnable");
+    Dart_SetMessageNotifyCallbackFn =
+        (Dart_SetMessageNotifyCallbackType)GetProcAddress(
+            process, "Dart_SetMessageNotifyCallback");
+    Dart_GetMessageNotifyCallbackFn =
+        (Dart_GetMessageNotifyCallbackType)GetProcAddress(
+            process, "Dart_GetMessageNotifyCallback");
+    Dart_ShouldPauseOnStartFn = (Dart_ShouldPauseOnStartType)GetProcAddress(
+        process, "Dart_ShouldPauseOnStart");
+    Dart_SetShouldPauseOnStartFn =
+        (Dart_SetShouldPauseOnStartType)GetProcAddress(
+            process, "Dart_SetShouldPauseOnStart");
+    Dart_IsPausedOnStartFn = (Dart_IsPausedOnStartType)GetProcAddress(
+        process, "Dart_IsPausedOnStart");
+    Dart_SetPausedOnStartFn = (Dart_SetPausedOnStartType)GetProcAddress(
+        process, "Dart_SetPausedOnStart");
+    Dart_ShouldPauseOnExitFn = (Dart_ShouldPauseOnExitType)GetProcAddress(
+        process, "Dart_ShouldPauseOnExit");
+    Dart_SetShouldPauseOnExitFn = (Dart_SetShouldPauseOnExitType)GetProcAddress(
+        process, "Dart_SetShouldPauseOnExit");
+    Dart_IsPausedOnExitFn =
+        (Dart_IsPausedOnExitType)GetProcAddress(process, "Dart_IsPausedOnExit");
+    Dart_SetPausedOnExitFn = (Dart_SetPausedOnExitType)GetProcAddress(
+        process, "Dart_SetPausedOnExit");
+    Dart_SetStickyErrorFn =
+        (Dart_SetStickyErrorType)GetProcAddress(process, "Dart_SetStickyError");
+    Dart_HasStickyErrorFn =
+        (Dart_HasStickyErrorType)GetProcAddress(process, "Dart_HasStickyError");
+    Dart_GetStickyErrorFn =
+        (Dart_GetStickyErrorType)GetProcAddress(process, "Dart_GetStickyError");
+    Dart_HandleMessageFn =
+        (Dart_HandleMessageType)GetProcAddress(process, "Dart_HandleMessage");
+    Dart_HandleServiceMessagesFn =
+        (Dart_HandleServiceMessagesType)GetProcAddress(
+            process, "Dart_HandleServiceMessages");
+    Dart_HasServiceMessagesFn = (Dart_HasServiceMessagesType)GetProcAddress(
+        process, "Dart_HasServiceMessages");
+    Dart_RunLoopFn = (Dart_RunLoopType)GetProcAddress(process, "Dart_RunLoop");
+    Dart_RunLoopAsyncFn =
+        (Dart_RunLoopAsyncType)GetProcAddress(process, "Dart_RunLoopAsync");
+    Dart_GetMainPortIdFn =
+        (Dart_GetMainPortIdType)GetProcAddress(process, "Dart_GetMainPortId");
+    Dart_HasLivePortsFn =
+        (Dart_HasLivePortsType)GetProcAddress(process, "Dart_HasLivePorts");
+    Dart_PostFn = (Dart_PostType)GetProcAddress(process, "Dart_Post");
+    Dart_NewSendPortFn =
+        (Dart_NewSendPortType)GetProcAddress(process, "Dart_NewSendPort");
+    Dart_NewSendPortExFn =
+        (Dart_NewSendPortExType)GetProcAddress(process, "Dart_NewSendPortEx");
+    Dart_SendPortGetIdFn =
+        (Dart_SendPortGetIdType)GetProcAddress(process, "Dart_SendPortGetId");
+    Dart_SendPortGetIdExFn = (Dart_SendPortGetIdExType)GetProcAddress(
+        process, "Dart_SendPortGetIdEx");
+    Dart_EnterScopeFn =
+        (Dart_EnterScopeType)GetProcAddress(process, "Dart_EnterScope");
+    Dart_ExitScopeFn =
+        (Dart_ExitScopeType)GetProcAddress(process, "Dart_ExitScope");
+    Dart_ScopeAllocateFn =
+        (Dart_ScopeAllocateType)GetProcAddress(process, "Dart_ScopeAllocate");
+    Dart_NullFn = (Dart_NullType)GetProcAddress(process, "Dart_Null");
+    Dart_IsNullFn = (Dart_IsNullType)GetProcAddress(process, "Dart_IsNull");
+    Dart_EmptyStringFn =
+        (Dart_EmptyStringType)GetProcAddress(process, "Dart_EmptyString");
+    Dart_TypeDynamicFn =
+        (Dart_TypeDynamicType)GetProcAddress(process, "Dart_TypeDynamic");
+    Dart_TypeVoidFn =
+        (Dart_TypeVoidType)GetProcAddress(process, "Dart_TypeVoid");
+    Dart_TypeNeverFn =
+        (Dart_TypeNeverType)GetProcAddress(process, "Dart_TypeNever");
+    Dart_ObjectEqualsFn =
+        (Dart_ObjectEqualsType)GetProcAddress(process, "Dart_ObjectEquals");
+    Dart_ObjectIsTypeFn =
+        (Dart_ObjectIsTypeType)GetProcAddress(process, "Dart_ObjectIsType");
+    Dart_IsInstanceFn =
+        (Dart_IsInstanceType)GetProcAddress(process, "Dart_IsInstance");
+    Dart_IsNumberFn =
+        (Dart_IsNumberType)GetProcAddress(process, "Dart_IsNumber");
+    Dart_IsIntegerFn =
+        (Dart_IsIntegerType)GetProcAddress(process, "Dart_IsInteger");
+    Dart_IsDoubleFn =
+        (Dart_IsDoubleType)GetProcAddress(process, "Dart_IsDouble");
+    Dart_IsBooleanFn =
+        (Dart_IsBooleanType)GetProcAddress(process, "Dart_IsBoolean");
+    Dart_IsStringFn =
+        (Dart_IsStringType)GetProcAddress(process, "Dart_IsString");
+    Dart_IsStringLatin1Fn =
+        (Dart_IsStringLatin1Type)GetProcAddress(process, "Dart_IsStringLatin1");
+    Dart_IsListFn = (Dart_IsListType)GetProcAddress(process, "Dart_IsList");
+    Dart_IsMapFn = (Dart_IsMapType)GetProcAddress(process, "Dart_IsMap");
+    Dart_IsLibraryFn =
+        (Dart_IsLibraryType)GetProcAddress(process, "Dart_IsLibrary");
+    Dart_IsTypeFn = (Dart_IsTypeType)GetProcAddress(process, "Dart_IsType");
+    Dart_IsFunctionFn =
+        (Dart_IsFunctionType)GetProcAddress(process, "Dart_IsFunction");
+    Dart_IsVariableFn =
+        (Dart_IsVariableType)GetProcAddress(process, "Dart_IsVariable");
+    Dart_IsTypeVariableFn =
+        (Dart_IsTypeVariableType)GetProcAddress(process, "Dart_IsTypeVariable");
+    Dart_IsClosureFn =
+        (Dart_IsClosureType)GetProcAddress(process, "Dart_IsClosure");
+    Dart_IsTypedDataFn =
+        (Dart_IsTypedDataType)GetProcAddress(process, "Dart_IsTypedData");
+    Dart_IsByteBufferFn =
+        (Dart_IsByteBufferType)GetProcAddress(process, "Dart_IsByteBuffer");
+    Dart_IsFutureFn =
+        (Dart_IsFutureType)GetProcAddress(process, "Dart_IsFuture");
+    Dart_InstanceGetTypeFn = (Dart_InstanceGetTypeType)GetProcAddress(
+        process, "Dart_InstanceGetType");
+    Dart_ClassNameFn =
+        (Dart_ClassNameType)GetProcAddress(process, "Dart_ClassName");
+    Dart_FunctionNameFn =
+        (Dart_FunctionNameType)GetProcAddress(process, "Dart_FunctionName");
+    Dart_FunctionOwnerFn =
+        (Dart_FunctionOwnerType)GetProcAddress(process, "Dart_FunctionOwner");
+    Dart_FunctionIsStaticFn = (Dart_FunctionIsStaticType)GetProcAddress(
+        process, "Dart_FunctionIsStatic");
+    Dart_IsTearOffFn =
+        (Dart_IsTearOffType)GetProcAddress(process, "Dart_IsTearOff");
+    Dart_ClosureFunctionFn = (Dart_ClosureFunctionType)GetProcAddress(
+        process, "Dart_ClosureFunction");
+    Dart_ClassLibraryFn =
+        (Dart_ClassLibraryType)GetProcAddress(process, "Dart_ClassLibrary");
+    Dart_IntegerFitsIntoInt64Fn = (Dart_IntegerFitsIntoInt64Type)GetProcAddress(
+        process, "Dart_IntegerFitsIntoInt64");
+    Dart_IntegerFitsIntoUint64Fn =
+        (Dart_IntegerFitsIntoUint64Type)GetProcAddress(
+            process, "Dart_IntegerFitsIntoUint64");
+    Dart_NewIntegerFn =
+        (Dart_NewIntegerType)GetProcAddress(process, "Dart_NewInteger");
+    Dart_NewIntegerFromUint64Fn = (Dart_NewIntegerFromUint64Type)GetProcAddress(
+        process, "Dart_NewIntegerFromUint64");
+    Dart_NewIntegerFromHexCStringFn =
+        (Dart_NewIntegerFromHexCStringType)GetProcAddress(
+            process, "Dart_NewIntegerFromHexCString");
+    Dart_IntegerToInt64Fn =
+        (Dart_IntegerToInt64Type)GetProcAddress(process, "Dart_IntegerToInt64");
+    Dart_IntegerToUint64Fn = (Dart_IntegerToUint64Type)GetProcAddress(
+        process, "Dart_IntegerToUint64");
+    Dart_IntegerToHexCStringFn = (Dart_IntegerToHexCStringType)GetProcAddress(
+        process, "Dart_IntegerToHexCString");
+    Dart_NewDoubleFn =
+        (Dart_NewDoubleType)GetProcAddress(process, "Dart_NewDouble");
+    Dart_DoubleValueFn =
+        (Dart_DoubleValueType)GetProcAddress(process, "Dart_DoubleValue");
+    Dart_GetStaticMethodClosureFn =
+        (Dart_GetStaticMethodClosureType)GetProcAddress(
+            process, "Dart_GetStaticMethodClosure");
+    Dart_TrueFn = (Dart_TrueType)GetProcAddress(process, "Dart_True");
+    Dart_FalseFn = (Dart_FalseType)GetProcAddress(process, "Dart_False");
+    Dart_NewBooleanFn =
+        (Dart_NewBooleanType)GetProcAddress(process, "Dart_NewBoolean");
+    Dart_BooleanValueFn =
+        (Dart_BooleanValueType)GetProcAddress(process, "Dart_BooleanValue");
+    Dart_StringLengthFn =
+        (Dart_StringLengthType)GetProcAddress(process, "Dart_StringLength");
+    Dart_StringUTF8LengthFn = (Dart_StringUTF8LengthType)GetProcAddress(
+        process, "Dart_StringUTF8Length");
+    Dart_NewStringFromCStringFn = (Dart_NewStringFromCStringType)GetProcAddress(
+        process, "Dart_NewStringFromCString");
+    Dart_NewStringFromUTF8Fn = (Dart_NewStringFromUTF8Type)GetProcAddress(
+        process, "Dart_NewStringFromUTF8");
+    Dart_NewStringFromUTF16Fn = (Dart_NewStringFromUTF16Type)GetProcAddress(
+        process, "Dart_NewStringFromUTF16");
+    Dart_NewStringFromUTF32Fn = (Dart_NewStringFromUTF32Type)GetProcAddress(
+        process, "Dart_NewStringFromUTF32");
+    Dart_StringToCStringFn = (Dart_StringToCStringType)GetProcAddress(
+        process, "Dart_StringToCString");
+    Dart_StringToUTF8Fn =
+        (Dart_StringToUTF8Type)GetProcAddress(process, "Dart_StringToUTF8");
+    Dart_CopyUTF8EncodingOfStringFn =
+        (Dart_CopyUTF8EncodingOfStringType)GetProcAddress(
+            process, "Dart_CopyUTF8EncodingOfString");
+    Dart_StringToLatin1Fn =
+        (Dart_StringToLatin1Type)GetProcAddress(process, "Dart_StringToLatin1");
+    Dart_StringToUTF16Fn =
+        (Dart_StringToUTF16Type)GetProcAddress(process, "Dart_StringToUTF16");
+    Dart_StringStorageSizeFn = (Dart_StringStorageSizeType)GetProcAddress(
+        process, "Dart_StringStorageSize");
+    Dart_StringGetPropertiesFn = (Dart_StringGetPropertiesType)GetProcAddress(
+        process, "Dart_StringGetProperties");
+    Dart_NewListFn = (Dart_NewListType)GetProcAddress(process, "Dart_NewList");
+    Dart_NewListOfTypeFn =
+        (Dart_NewListOfTypeType)GetProcAddress(process, "Dart_NewListOfType");
+    Dart_NewListOfTypeFilledFn = (Dart_NewListOfTypeFilledType)GetProcAddress(
+        process, "Dart_NewListOfTypeFilled");
+    Dart_ListLengthFn =
+        (Dart_ListLengthType)GetProcAddress(process, "Dart_ListLength");
+    Dart_ListGetAtFn =
+        (Dart_ListGetAtType)GetProcAddress(process, "Dart_ListGetAt");
+    Dart_ListGetRangeFn =
+        (Dart_ListGetRangeType)GetProcAddress(process, "Dart_ListGetRange");
+    Dart_ListSetAtFn =
+        (Dart_ListSetAtType)GetProcAddress(process, "Dart_ListSetAt");
+    Dart_ListGetAsBytesFn =
+        (Dart_ListGetAsBytesType)GetProcAddress(process, "Dart_ListGetAsBytes");
+    Dart_ListSetAsBytesFn =
+        (Dart_ListSetAsBytesType)GetProcAddress(process, "Dart_ListSetAsBytes");
+    Dart_MapGetAtFn =
+        (Dart_MapGetAtType)GetProcAddress(process, "Dart_MapGetAt");
+    Dart_MapContainsKeyFn =
+        (Dart_MapContainsKeyType)GetProcAddress(process, "Dart_MapContainsKey");
+    Dart_MapKeysFn = (Dart_MapKeysType)GetProcAddress(process, "Dart_MapKeys");
+    Dart_GetTypeOfTypedDataFn = (Dart_GetTypeOfTypedDataType)GetProcAddress(
+        process, "Dart_GetTypeOfTypedData");
+    Dart_GetTypeOfExternalTypedDataFn =
+        (Dart_GetTypeOfExternalTypedDataType)GetProcAddress(
+            process, "Dart_GetTypeOfExternalTypedData");
+    Dart_NewTypedDataFn =
+        (Dart_NewTypedDataType)GetProcAddress(process, "Dart_NewTypedData");
+    Dart_NewExternalTypedDataFn = (Dart_NewExternalTypedDataType)GetProcAddress(
+        process, "Dart_NewExternalTypedData");
+    Dart_NewExternalTypedDataWithFinalizerFn =
+        (Dart_NewExternalTypedDataWithFinalizerType)GetProcAddress(
+            process, "Dart_NewExternalTypedDataWithFinalizer");
+    Dart_NewUnmodifiableExternalTypedDataWithFinalizerFn =
+        (Dart_NewUnmodifiableExternalTypedDataWithFinalizerType)GetProcAddress(
+            process, "Dart_NewUnmodifiableExternalTypedDataWithFinalizer");
+    Dart_NewByteBufferFn =
+        (Dart_NewByteBufferType)GetProcAddress(process, "Dart_NewByteBuffer");
+    Dart_TypedDataAcquireDataFn = (Dart_TypedDataAcquireDataType)GetProcAddress(
+        process, "Dart_TypedDataAcquireData");
+    Dart_TypedDataReleaseDataFn = (Dart_TypedDataReleaseDataType)GetProcAddress(
+        process, "Dart_TypedDataReleaseData");
+    Dart_GetDataFromByteBufferFn =
+        (Dart_GetDataFromByteBufferType)GetProcAddress(
+            process, "Dart_GetDataFromByteBuffer");
+    Dart_NewFn = (Dart_NewType)GetProcAddress(process, "Dart_New");
+    Dart_AllocateFn =
+        (Dart_AllocateType)GetProcAddress(process, "Dart_Allocate");
+    Dart_AllocateWithNativeFieldsFn =
+        (Dart_AllocateWithNativeFieldsType)GetProcAddress(
+            process, "Dart_AllocateWithNativeFields");
+    Dart_InvokeFn = (Dart_InvokeType)GetProcAddress(process, "Dart_Invoke");
+    Dart_InvokeClosureFn =
+        (Dart_InvokeClosureType)GetProcAddress(process, "Dart_InvokeClosure");
+    Dart_InvokeConstructorFn = (Dart_InvokeConstructorType)GetProcAddress(
+        process, "Dart_InvokeConstructor");
+    Dart_GetFieldFn =
+        (Dart_GetFieldType)GetProcAddress(process, "Dart_GetField");
+    Dart_SetFieldFn =
+        (Dart_SetFieldType)GetProcAddress(process, "Dart_SetField");
+    Dart_ThrowExceptionFn =
+        (Dart_ThrowExceptionType)GetProcAddress(process, "Dart_ThrowException");
+    Dart_ReThrowExceptionFn = (Dart_ReThrowExceptionType)GetProcAddress(
+        process, "Dart_ReThrowException");
+    Dart_GetNativeInstanceFieldCountFn =
+        (Dart_GetNativeInstanceFieldCountType)GetProcAddress(
+            process, "Dart_GetNativeInstanceFieldCount");
+    Dart_GetNativeInstanceFieldFn =
+        (Dart_GetNativeInstanceFieldType)GetProcAddress(
+            process, "Dart_GetNativeInstanceField");
+    Dart_SetNativeInstanceFieldFn =
+        (Dart_SetNativeInstanceFieldType)GetProcAddress(
+            process, "Dart_SetNativeInstanceField");
+    Dart_GetNativeIsolateGroupDataFn =
+        (Dart_GetNativeIsolateGroupDataType)GetProcAddress(
+            process, "Dart_GetNativeIsolateGroupData");
+    Dart_GetNativeArgumentsFn = (Dart_GetNativeArgumentsType)GetProcAddress(
+        process, "Dart_GetNativeArguments");
+    Dart_GetNativeArgumentFn = (Dart_GetNativeArgumentType)GetProcAddress(
+        process, "Dart_GetNativeArgument");
+    Dart_GetNativeArgumentCountFn =
+        (Dart_GetNativeArgumentCountType)GetProcAddress(
+            process, "Dart_GetNativeArgumentCount");
+    Dart_GetNativeFieldsOfArgumentFn =
+        (Dart_GetNativeFieldsOfArgumentType)GetProcAddress(
+            process, "Dart_GetNativeFieldsOfArgument");
+    Dart_GetNativeReceiverFn = (Dart_GetNativeReceiverType)GetProcAddress(
+        process, "Dart_GetNativeReceiver");
+    Dart_GetNativeStringArgumentFn =
+        (Dart_GetNativeStringArgumentType)GetProcAddress(
+            process, "Dart_GetNativeStringArgument");
+    Dart_GetNativeIntegerArgumentFn =
+        (Dart_GetNativeIntegerArgumentType)GetProcAddress(
+            process, "Dart_GetNativeIntegerArgument");
+    Dart_GetNativeBooleanArgumentFn =
+        (Dart_GetNativeBooleanArgumentType)GetProcAddress(
+            process, "Dart_GetNativeBooleanArgument");
+    Dart_GetNativeDoubleArgumentFn =
+        (Dart_GetNativeDoubleArgumentType)GetProcAddress(
+            process, "Dart_GetNativeDoubleArgument");
+    Dart_SetReturnValueFn =
+        (Dart_SetReturnValueType)GetProcAddress(process, "Dart_SetReturnValue");
+    Dart_SetWeakHandleReturnValueFn =
+        (Dart_SetWeakHandleReturnValueType)GetProcAddress(
+            process, "Dart_SetWeakHandleReturnValue");
+    Dart_SetBooleanReturnValueFn =
+        (Dart_SetBooleanReturnValueType)GetProcAddress(
+            process, "Dart_SetBooleanReturnValue");
+    Dart_SetIntegerReturnValueFn =
+        (Dart_SetIntegerReturnValueType)GetProcAddress(
+            process, "Dart_SetIntegerReturnValue");
+    Dart_SetDoubleReturnValueFn = (Dart_SetDoubleReturnValueType)GetProcAddress(
+        process, "Dart_SetDoubleReturnValue");
+    Dart_SetEnvironmentCallbackFn =
+        (Dart_SetEnvironmentCallbackType)GetProcAddress(
+            process, "Dart_SetEnvironmentCallback");
+    Dart_SetNativeResolverFn = (Dart_SetNativeResolverType)GetProcAddress(
+        process, "Dart_SetNativeResolver");
+    Dart_GetNativeResolverFn = (Dart_GetNativeResolverType)GetProcAddress(
+        process, "Dart_GetNativeResolver");
+    Dart_GetNativeSymbolFn = (Dart_GetNativeSymbolType)GetProcAddress(
+        process, "Dart_GetNativeSymbol");
+    Dart_SetFfiNativeResolverFn = (Dart_SetFfiNativeResolverType)GetProcAddress(
+        process, "Dart_SetFfiNativeResolver");
+    Dart_InitializeNativeAssetsResolverFn =
+        (Dart_InitializeNativeAssetsResolverType)GetProcAddress(
+            process, "Dart_InitializeNativeAssetsResolver");
+    Dart_SetLibraryTagHandlerFn = (Dart_SetLibraryTagHandlerType)GetProcAddress(
+        process, "Dart_SetLibraryTagHandler");
+    Dart_SetDeferredLoadHandlerFn =
+        (Dart_SetDeferredLoadHandlerType)GetProcAddress(
+            process, "Dart_SetDeferredLoadHandler");
+    Dart_DeferredLoadCompleteFn = (Dart_DeferredLoadCompleteType)GetProcAddress(
+        process, "Dart_DeferredLoadComplete");
+    Dart_DeferredLoadCompleteErrorFn =
+        (Dart_DeferredLoadCompleteErrorType)GetProcAddress(
+            process, "Dart_DeferredLoadCompleteError");
+    Dart_LoadScriptFromKernelFn = (Dart_LoadScriptFromKernelType)GetProcAddress(
+        process, "Dart_LoadScriptFromKernel");
+    Dart_RootLibraryFn =
+        (Dart_RootLibraryType)GetProcAddress(process, "Dart_RootLibrary");
+    Dart_SetRootLibraryFn =
+        (Dart_SetRootLibraryType)GetProcAddress(process, "Dart_SetRootLibrary");
+    Dart_GetTypeFn = (Dart_GetTypeType)GetProcAddress(process, "Dart_GetType");
+    Dart_GetNullableTypeFn = (Dart_GetNullableTypeType)GetProcAddress(
+        process, "Dart_GetNullableType");
+    Dart_GetNonNullableTypeFn = (Dart_GetNonNullableTypeType)GetProcAddress(
+        process, "Dart_GetNonNullableType");
+    Dart_TypeToNullableTypeFn = (Dart_TypeToNullableTypeType)GetProcAddress(
+        process, "Dart_TypeToNullableType");
+    Dart_TypeToNonNullableTypeFn =
+        (Dart_TypeToNonNullableTypeType)GetProcAddress(
+            process, "Dart_TypeToNonNullableType");
+    Dart_IsNullableTypeFn =
+        (Dart_IsNullableTypeType)GetProcAddress(process, "Dart_IsNullableType");
+    Dart_IsNonNullableTypeFn = (Dart_IsNonNullableTypeType)GetProcAddress(
+        process, "Dart_IsNonNullableType");
+    Dart_GetClassFn =
+        (Dart_GetClassType)GetProcAddress(process, "Dart_GetClass");
+    Dart_LibraryUrlFn =
+        (Dart_LibraryUrlType)GetProcAddress(process, "Dart_LibraryUrl");
+    Dart_LibraryResolvedUrlFn = (Dart_LibraryResolvedUrlType)GetProcAddress(
+        process, "Dart_LibraryResolvedUrl");
+    Dart_GetLoadedLibrariesFn = (Dart_GetLoadedLibrariesType)GetProcAddress(
+        process, "Dart_GetLoadedLibraries");
+    Dart_LookupLibraryFn =
+        (Dart_LookupLibraryType)GetProcAddress(process, "Dart_LookupLibrary");
+    Dart_LibraryHandleErrorFn = (Dart_LibraryHandleErrorType)GetProcAddress(
+        process, "Dart_LibraryHandleError");
+    Dart_LoadLibraryFromKernelFn =
+        (Dart_LoadLibraryFromKernelType)GetProcAddress(
+            process, "Dart_LoadLibraryFromKernel");
+    Dart_LoadLibraryFn =
+        (Dart_LoadLibraryType)GetProcAddress(process, "Dart_LoadLibrary");
+    Dart_FinalizeLoadingFn = (Dart_FinalizeLoadingType)GetProcAddress(
+        process, "Dart_FinalizeLoading");
+    Dart_GetPeerFn = (Dart_GetPeerType)GetProcAddress(process, "Dart_GetPeer");
+    Dart_SetPeerFn = (Dart_SetPeerType)GetProcAddress(process, "Dart_SetPeer");
+    Dart_IsKernelIsolateFn = (Dart_IsKernelIsolateType)GetProcAddress(
+        process, "Dart_IsKernelIsolate");
+    Dart_KernelIsolateIsRunningFn =
+        (Dart_KernelIsolateIsRunningType)GetProcAddress(
+            process, "Dart_KernelIsolateIsRunning");
+    Dart_KernelPortFn =
+        (Dart_KernelPortType)GetProcAddress(process, "Dart_KernelPort");
+    Dart_CompileToKernelFn = (Dart_CompileToKernelType)GetProcAddress(
+        process, "Dart_CompileToKernel");
+    Dart_KernelListDependenciesFn =
+        (Dart_KernelListDependenciesType)GetProcAddress(
+            process, "Dart_KernelListDependencies");
+    Dart_SetDartLibrarySourcesKernelFn =
+        (Dart_SetDartLibrarySourcesKernelType)GetProcAddress(
+            process, "Dart_SetDartLibrarySourcesKernel");
+    Dart_DetectNullSafetyFn = (Dart_DetectNullSafetyType)GetProcAddress(
+        process, "Dart_DetectNullSafety");
+    Dart_IsServiceIsolateFn = (Dart_IsServiceIsolateType)GetProcAddress(
+        process, "Dart_IsServiceIsolate");
+    Dart_WriteProfileToTimelineFn =
+        (Dart_WriteProfileToTimelineType)GetProcAddress(
+            process, "Dart_WriteProfileToTimeline");
+    Dart_PrecompileFn =
+        (Dart_PrecompileType)GetProcAddress(process, "Dart_Precompile");
+    Dart_LoadingUnitLibraryUrisFn =
+        (Dart_LoadingUnitLibraryUrisType)GetProcAddress(
+            process, "Dart_LoadingUnitLibraryUris");
+    Dart_CreateAppAOTSnapshotAsAssemblyFn =
+        (Dart_CreateAppAOTSnapshotAsAssemblyType)GetProcAddress(
+            process, "Dart_CreateAppAOTSnapshotAsAssembly");
+    Dart_CreateAppAOTSnapshotAsAssembliesFn =
+        (Dart_CreateAppAOTSnapshotAsAssembliesType)GetProcAddress(
+            process, "Dart_CreateAppAOTSnapshotAsAssemblies");
+    Dart_CreateAppAOTSnapshotAsElfFn =
+        (Dart_CreateAppAOTSnapshotAsElfType)GetProcAddress(
+            process, "Dart_CreateAppAOTSnapshotAsElf");
+    Dart_CreateAppAOTSnapshotAsElfsFn =
+        (Dart_CreateAppAOTSnapshotAsElfsType)GetProcAddress(
+            process, "Dart_CreateAppAOTSnapshotAsElfs");
+    Dart_CreateVMAOTSnapshotAsAssemblyFn =
+        (Dart_CreateVMAOTSnapshotAsAssemblyType)GetProcAddress(
+            process, "Dart_CreateVMAOTSnapshotAsAssembly");
+    Dart_SortClassesFn =
+        (Dart_SortClassesType)GetProcAddress(process, "Dart_SortClasses");
+    Dart_CreateAppJITSnapshotAsBlobsFn =
+        (Dart_CreateAppJITSnapshotAsBlobsType)GetProcAddress(
+            process, "Dart_CreateAppJITSnapshotAsBlobs");
+    Dart_GetObfuscationMapFn = (Dart_GetObfuscationMapType)GetProcAddress(
+        process, "Dart_GetObfuscationMap");
+    Dart_IsPrecompiledRuntimeFn = (Dart_IsPrecompiledRuntimeType)GetProcAddress(
+        process, "Dart_IsPrecompiledRuntime");
+    Dart_DumpNativeStackTraceFn = (Dart_DumpNativeStackTraceType)GetProcAddress(
+        process, "Dart_DumpNativeStackTrace");
+    Dart_PrepareToAbortFn =
+        (Dart_PrepareToAbortType)GetProcAddress(process, "Dart_PrepareToAbort");
+    Dart_SetDwarfStackTraceFootnoteCallbackFn =
+        (Dart_SetDwarfStackTraceFootnoteCallbackType)GetProcAddress(
+            process, "Dart_SetDwarfStackTraceFootnoteCallback");
+    Dart_PostCObjectFn =
+        (Dart_PostCObjectType)GetProcAddress(process, "Dart_PostCObject");
+    Dart_PostIntegerFn =
+        (Dart_PostIntegerType)GetProcAddress(process, "Dart_PostInteger");
+    Dart_NewNativePortFn =
+        (Dart_NewNativePortType)GetProcAddress(process, "Dart_NewNativePort");
+    Dart_NewConcurrentNativePortFn =
+        (Dart_NewConcurrentNativePortType)GetProcAddress(
+            process, "Dart_NewConcurrentNativePort");
+    Dart_CloseNativePortFn = (Dart_CloseNativePortType)GetProcAddress(
+        process, "Dart_CloseNativePort");
+    Dart_CompileAllFn =
+        (Dart_CompileAllType)GetProcAddress(process, "Dart_CompileAll");
+    Dart_FinalizeAllClassesFn = (Dart_FinalizeAllClassesType)GetProcAddress(
+        process, "Dart_FinalizeAllClasses");
+    Dart_ExecuteInternalCommandFn =
+        (Dart_ExecuteInternalCommandType)GetProcAddress(
+            process, "Dart_ExecuteInternalCommand");
+  }
+
+  return TRUE;
+}
+
+bool Dart_IsError(Dart_Handle handle) {
+  return Dart_IsErrorFn(handle);
+}
+
+bool Dart_IsApiError(Dart_Handle handle) {
+  return Dart_IsApiErrorFn(handle);
+}
+
+bool Dart_IsUnhandledExceptionError(Dart_Handle handle) {
+  return Dart_IsUnhandledExceptionErrorFn(handle);
+}
+
+bool Dart_IsCompilationError(Dart_Handle handle) {
+  return Dart_IsCompilationErrorFn(handle);
+}
+
+bool Dart_IsFatalError(Dart_Handle handle) {
+  return Dart_IsFatalErrorFn(handle);
+}
+
+const char* Dart_GetError(Dart_Handle handle) {
+  return Dart_GetErrorFn(handle);
+}
+
+bool Dart_ErrorHasException(Dart_Handle handle) {
+  return Dart_ErrorHasExceptionFn(handle);
+}
+
+Dart_Handle Dart_ErrorGetException(Dart_Handle handle) {
+  return Dart_ErrorGetExceptionFn(handle);
+}
+
+Dart_Handle Dart_ErrorGetStackTrace(Dart_Handle handle) {
+  return Dart_ErrorGetStackTraceFn(handle);
+}
+
+Dart_Handle Dart_NewApiError(const char* error) {
+  return Dart_NewApiErrorFn(error);
+}
+
+Dart_Handle Dart_NewCompilationError(const char* error) {
+  return Dart_NewCompilationErrorFn(error);
+}
+
+Dart_Handle Dart_NewUnhandledExceptionError(Dart_Handle exception) {
+  return Dart_NewUnhandledExceptionErrorFn(exception);
+}
+
+void Dart_PropagateError(Dart_Handle handle) {
+  Dart_PropagateErrorFn(handle);
+}
+
+Dart_Handle Dart_ToString(Dart_Handle object) {
+  return Dart_ToStringFn(object);
+}
+
+bool Dart_IdentityEquals(Dart_Handle obj1, Dart_Handle obj2) {
+  return Dart_IdentityEqualsFn(obj1, obj2);
+}
+
+Dart_Handle Dart_HandleFromPersistent(Dart_PersistentHandle object) {
+  return Dart_HandleFromPersistentFn(object);
+}
+
+Dart_Handle Dart_HandleFromWeakPersistent(Dart_WeakPersistentHandle object) {
+  return Dart_HandleFromWeakPersistentFn(object);
+}
+
+Dart_PersistentHandle Dart_NewPersistentHandle(Dart_Handle object) {
+  return Dart_NewPersistentHandleFn(object);
+}
+
+void Dart_SetPersistentHandle(Dart_PersistentHandle obj1, Dart_Handle obj2) {
+  Dart_SetPersistentHandleFn(obj1, obj2);
+}
+
+void Dart_DeletePersistentHandle(Dart_PersistentHandle object) {
+  Dart_DeletePersistentHandleFn(object);
+}
+
+Dart_WeakPersistentHandle Dart_NewWeakPersistentHandle(
+    Dart_Handle object,
+    void* peer,
+    intptr_t external_allocation_size,
+    Dart_HandleFinalizer callback) {
+  return Dart_NewWeakPersistentHandleFn(object, peer, external_allocation_size,
+                                        callback);
+}
+
+void Dart_DeleteWeakPersistentHandle(Dart_WeakPersistentHandle object) {
+  Dart_DeleteWeakPersistentHandleFn(object);
+}
+
+Dart_FinalizableHandle Dart_NewFinalizableHandle(
+    Dart_Handle object,
+    void* peer,
+    intptr_t external_allocation_size,
+    Dart_HandleFinalizer callback) {
+  return Dart_NewFinalizableHandleFn(object, peer, external_allocation_size,
+                                     callback);
+}
+
+void Dart_DeleteFinalizableHandle(Dart_FinalizableHandle object,
+                                  Dart_Handle strong_ref_to_object) {
+  Dart_DeleteFinalizableHandleFn(object, strong_ref_to_object);
+}
+
+const char* Dart_VersionString() {
+  return Dart_VersionStringFn();
+}
+
+void Dart_IsolateFlagsInitialize(Dart_IsolateFlags* flags) {
+  Dart_IsolateFlagsInitializeFn(flags);
+}
+
+char* Dart_Initialize(Dart_InitializeParams* params) {
+  return Dart_InitializeFn(params);
+}
+
+char* Dart_Cleanup() {
+  return Dart_CleanupFn();
+}
+
+char* Dart_SetVMFlags(int argc, const char** argv) {
+  return Dart_SetVMFlagsFn(argc, argv);
+}
+
+bool Dart_IsVMFlagSet(const char* flag_name) {
+  return Dart_IsVMFlagSetFn(flag_name);
+}
+
+Dart_Isolate Dart_CreateIsolateGroup(
+    const char* script_uri,
+    const char* name,
+    const uint8_t* isolate_snapshot_data,
+    const uint8_t* isolate_snapshot_instructions,
+    Dart_IsolateFlags* flags,
+    void* isolate_group_data,
+    void* isolate_data,
+    char** error) {
+  return Dart_CreateIsolateGroupFn(script_uri, name, isolate_snapshot_data,
+                                   isolate_snapshot_instructions, flags,
+                                   isolate_group_data, isolate_data, error);
+}
+
+Dart_Isolate Dart_CreateIsolateInGroup(
+    Dart_Isolate group_member,
+    const char* name,
+    Dart_IsolateShutdownCallback shutdown_callback,
+    Dart_IsolateCleanupCallback cleanup_callback,
+    void* child_isolate_data,
+    char** error) {
+  return Dart_CreateIsolateInGroupFn(group_member, name, shutdown_callback,
+                                     cleanup_callback, child_isolate_data,
+                                     error);
+}
+
+Dart_Isolate Dart_CreateIsolateGroupFromKernel(const char* script_uri,
+                                               const char* name,
+                                               const uint8_t* kernel_buffer,
+                                               intptr_t kernel_buffer_size,
+                                               Dart_IsolateFlags* flags,
+                                               void* isolate_group_data,
+                                               void* isolate_data,
+                                               char** error) {
+  return Dart_CreateIsolateGroupFromKernelFn(
+      script_uri, name, kernel_buffer, kernel_buffer_size, flags,
+      isolate_group_data, isolate_data, error);
+}
+
+void Dart_ShutdownIsolate() {
+  Dart_ShutdownIsolateFn();
+}
+
+Dart_Isolate Dart_CurrentIsolate() {
+  return Dart_CurrentIsolateFn();
+}
+
+void* Dart_CurrentIsolateData() {
+  return Dart_CurrentIsolateDataFn();
+}
+
+void* Dart_IsolateData(Dart_Isolate isolate) {
+  return Dart_IsolateDataFn(isolate);
+}
+
+Dart_IsolateGroup Dart_CurrentIsolateGroup() {
+  return Dart_CurrentIsolateGroupFn();
+}
+
+void* Dart_CurrentIsolateGroupData() {
+  return Dart_CurrentIsolateGroupDataFn();
+}
+
+Dart_IsolateGroupId Dart_CurrentIsolateGroupId() {
+  return Dart_CurrentIsolateGroupIdFn();
+}
+
+void* Dart_IsolateGroupData(Dart_Isolate isolate) {
+  return Dart_IsolateGroupDataFn(isolate);
+}
+
+Dart_Handle Dart_DebugName() {
+  return Dart_DebugNameFn();
+}
+
+const char* Dart_DebugNameToCString() {
+  return Dart_DebugNameToCStringFn();
+}
+
+const char* Dart_IsolateServiceId(Dart_Isolate isolate) {
+  return Dart_IsolateServiceIdFn(isolate);
+}
+
+void Dart_EnterIsolate(Dart_Isolate isolate) {
+  Dart_EnterIsolateFn(isolate);
+}
+
+void Dart_KillIsolate(Dart_Isolate isolate) {
+  Dart_KillIsolateFn(isolate);
+}
+
+void Dart_NotifyIdle(int64_t deadline) {
+  Dart_NotifyIdleFn(deadline);
+}
+
+void Dart_EnableHeapSampling() {
+  Dart_EnableHeapSamplingFn();
+}
+
+void Dart_DisableHeapSampling() {
+  Dart_DisableHeapSamplingFn();
+}
+
+void Dart_RegisterHeapSamplingCallback(
+    Dart_HeapSamplingCreateCallback create_callback,
+    Dart_HeapSamplingDeleteCallback delete_callback) {
+  Dart_RegisterHeapSamplingCallbackFn(create_callback, delete_callback);
+}
+
+void Dart_ReportSurvivingAllocations(Dart_HeapSamplingReportCallback callback,
+                                     void* context,
+                                     bool force_gc) {
+  Dart_ReportSurvivingAllocationsFn(callback, context, force_gc);
+}
+
+void Dart_SetHeapSamplingPeriod(intptr_t bytes) {
+  Dart_SetHeapSamplingPeriodFn(bytes);
+}
+
+void Dart_NotifyDestroyed() {
+  Dart_NotifyDestroyedFn();
+}
+
+void Dart_NotifyLowMemory() {
+  Dart_NotifyLowMemoryFn();
+}
+
+Dart_PerformanceMode Dart_SetPerformanceMode(Dart_PerformanceMode mode) {
+  return Dart_SetPerformanceModeFn(mode);
+}
+
+void Dart_StartProfiling() {
+  Dart_StartProfilingFn();
+}
+
+void Dart_StopProfiling() {
+  Dart_StopProfilingFn();
+}
+
+void Dart_ThreadDisableProfiling() {
+  Dart_ThreadDisableProfilingFn();
+}
+
+void Dart_ThreadEnableProfiling() {
+  Dart_ThreadEnableProfilingFn();
+}
+
+void Dart_AddSymbols(const char* dso_name, void* buffer, intptr_t buffer_size) {
+  Dart_AddSymbolsFn(dso_name, buffer, buffer_size);
+}
+
+void Dart_ExitIsolate() {
+  Dart_ExitIsolateFn();
+}
+
+Dart_Handle Dart_CreateSnapshot(uint8_t** vm_snapshot_data_buffer,
+                                intptr_t* vm_snapshot_data_size,
+                                uint8_t** isolate_snapshot_data_buffer,
+                                intptr_t* isolate_snapshot_data_size,
+                                bool is_core) {
+  return Dart_CreateSnapshotFn(vm_snapshot_data_buffer, vm_snapshot_data_size,
+                               isolate_snapshot_data_buffer,
+                               isolate_snapshot_data_size, is_core);
+}
+
+bool Dart_IsKernel(const uint8_t* buffer, intptr_t buffer_size) {
+  return Dart_IsKernelFn(buffer, buffer_size);
+}
+
+char* Dart_IsolateMakeRunnable(Dart_Isolate isolate) {
+  return Dart_IsolateMakeRunnableFn(isolate);
+}
+
+void Dart_SetMessageNotifyCallback(
+    Dart_MessageNotifyCallback message_notify_callback) {
+  Dart_SetMessageNotifyCallbackFn(message_notify_callback);
+}
+
+Dart_MessageNotifyCallback Dart_GetMessageNotifyCallback() {
+  return Dart_GetMessageNotifyCallbackFn();
+}
+
+bool Dart_ShouldPauseOnStart() {
+  return Dart_ShouldPauseOnStartFn();
+}
+
+void Dart_SetShouldPauseOnStart(bool should_pause) {
+  Dart_SetShouldPauseOnStartFn(should_pause);
+}
+
+bool Dart_IsPausedOnStart() {
+  return Dart_IsPausedOnStartFn();
+}
+
+void Dart_SetPausedOnStart(bool paused) {
+  Dart_SetPausedOnStartFn(paused);
+}
+
+bool Dart_ShouldPauseOnExit() {
+  return Dart_ShouldPauseOnExitFn();
+}
+
+void Dart_SetShouldPauseOnExit(bool should_pause) {
+  Dart_SetShouldPauseOnExitFn(should_pause);
+}
+
+bool Dart_IsPausedOnExit() {
+  return Dart_IsPausedOnExitFn();
+}
+
+void Dart_SetPausedOnExit(bool paused) {
+  Dart_SetPausedOnExitFn(paused);
+}
+
+void Dart_SetStickyError(Dart_Handle error) {
+  Dart_SetStickyErrorFn(error);
+}
+
+bool Dart_HasStickyError() {
+  return Dart_HasStickyErrorFn();
+}
+
+Dart_Handle Dart_GetStickyError() {
+  return Dart_GetStickyErrorFn();
+}
+
+Dart_Handle Dart_HandleMessage() {
+  return Dart_HandleMessageFn();
+}
+
+bool Dart_HandleServiceMessages() {
+  return Dart_HandleServiceMessagesFn();
+}
+
+bool Dart_HasServiceMessages() {
+  return Dart_HasServiceMessagesFn();
+}
+
+Dart_Handle Dart_RunLoop() {
+  return Dart_RunLoopFn();
+}
+
+bool Dart_RunLoopAsync(bool errors_are_fatal,
+                       Dart_Port on_error_port,
+                       Dart_Port on_exit_port,
+                       char** error) {
+  return Dart_RunLoopAsyncFn(errors_are_fatal, on_error_port, on_exit_port,
+                             error);
+}
+
+Dart_Port Dart_GetMainPortId() {
+  return Dart_GetMainPortIdFn();
+}
+
+bool Dart_HasLivePorts() {
+  return Dart_HasLivePortsFn();
+}
+
+bool Dart_Post(Dart_Port port_id, Dart_Handle object) {
+  return Dart_PostFn(port_id, object);
+}
+
+Dart_Handle Dart_NewSendPort(Dart_Port port_id) {
+  return Dart_NewSendPortFn(port_id);
+}
+
+Dart_Handle Dart_NewSendPortEx(Dart_PortEx portex_id) {
+  return Dart_NewSendPortExFn(portex_id);
+}
+
+Dart_Handle Dart_SendPortGetId(Dart_Handle port, Dart_Port* port_id) {
+  return Dart_SendPortGetIdFn(port, port_id);
+}
+
+Dart_Handle Dart_SendPortGetIdEx(Dart_Handle port, Dart_PortEx* portex_id) {
+  return Dart_SendPortGetIdExFn(port, portex_id);
+}
+
+void Dart_EnterScope() {
+  Dart_EnterScopeFn();
+}
+
+void Dart_ExitScope() {
+  Dart_ExitScopeFn();
+}
+
+uint8_t* Dart_ScopeAllocate(intptr_t size) {
+  return Dart_ScopeAllocateFn(size);
+}
+
+Dart_Handle Dart_Null() {
+  return Dart_NullFn();
+}
+
+bool Dart_IsNull(Dart_Handle object) {
+  return Dart_IsNullFn(object);
+}
+
+Dart_Handle Dart_EmptyString() {
+  return Dart_EmptyStringFn();
+}
+
+Dart_Handle Dart_TypeDynamic() {
+  return Dart_TypeDynamicFn();
+}
+
+Dart_Handle Dart_TypeVoid() {
+  return Dart_TypeVoidFn();
+}
+
+Dart_Handle Dart_TypeNever() {
+  return Dart_TypeNeverFn();
+}
+
+Dart_Handle Dart_ObjectEquals(Dart_Handle obj1, Dart_Handle obj2, bool* equal) {
+  return Dart_ObjectEqualsFn(obj1, obj2, equal);
+}
+
+Dart_Handle Dart_ObjectIsType(Dart_Handle object,
+                              Dart_Handle type,
+                              bool* instanceof) {
+  return Dart_ObjectIsTypeFn(object, type, instanceof);
+}
+
+bool Dart_IsInstance(Dart_Handle object) {
+  return Dart_IsInstanceFn(object);
+}
+
+bool Dart_IsNumber(Dart_Handle object) {
+  return Dart_IsNumberFn(object);
+}
+
+bool Dart_IsInteger(Dart_Handle object) {
+  return Dart_IsIntegerFn(object);
+}
+
+bool Dart_IsDouble(Dart_Handle object) {
+  return Dart_IsDoubleFn(object);
+}
+
+bool Dart_IsBoolean(Dart_Handle object) {
+  return Dart_IsBooleanFn(object);
+}
+
+bool Dart_IsString(Dart_Handle object) {
+  return Dart_IsStringFn(object);
+}
+
+bool Dart_IsStringLatin1(Dart_Handle object) {
+  return Dart_IsStringLatin1Fn(object);
+}
+
+bool Dart_IsList(Dart_Handle object) {
+  return Dart_IsListFn(object);
+}
+
+bool Dart_IsMap(Dart_Handle object) {
+  return Dart_IsMapFn(object);
+}
+
+bool Dart_IsLibrary(Dart_Handle object) {
+  return Dart_IsLibraryFn(object);
+}
+
+bool Dart_IsType(Dart_Handle handle) {
+  return Dart_IsTypeFn(handle);
+}
+
+bool Dart_IsFunction(Dart_Handle handle) {
+  return Dart_IsFunctionFn(handle);
+}
+
+bool Dart_IsVariable(Dart_Handle handle) {
+  return Dart_IsVariableFn(handle);
+}
+
+bool Dart_IsTypeVariable(Dart_Handle handle) {
+  return Dart_IsTypeVariableFn(handle);
+}
+
+bool Dart_IsClosure(Dart_Handle object) {
+  return Dart_IsClosureFn(object);
+}
+
+bool Dart_IsTypedData(Dart_Handle object) {
+  return Dart_IsTypedDataFn(object);
+}
+
+bool Dart_IsByteBuffer(Dart_Handle object) {
+  return Dart_IsByteBufferFn(object);
+}
+
+bool Dart_IsFuture(Dart_Handle object) {
+  return Dart_IsFutureFn(object);
+}
+
+Dart_Handle Dart_InstanceGetType(Dart_Handle instance) {
+  return Dart_InstanceGetTypeFn(instance);
+}
+
+Dart_Handle Dart_ClassName(Dart_Handle cls_type) {
+  return Dart_ClassNameFn(cls_type);
+}
+
+Dart_Handle Dart_FunctionName(Dart_Handle function) {
+  return Dart_FunctionNameFn(function);
+}
+
+Dart_Handle Dart_FunctionOwner(Dart_Handle function) {
+  return Dart_FunctionOwnerFn(function);
+}
+
+Dart_Handle Dart_FunctionIsStatic(Dart_Handle function, bool* is_static) {
+  return Dart_FunctionIsStaticFn(function, is_static);
+}
+
+bool Dart_IsTearOff(Dart_Handle object) {
+  return Dart_IsTearOffFn(object);
+}
+
+Dart_Handle Dart_ClosureFunction(Dart_Handle closure) {
+  return Dart_ClosureFunctionFn(closure);
+}
+
+Dart_Handle Dart_ClassLibrary(Dart_Handle cls_type) {
+  return Dart_ClassLibraryFn(cls_type);
+}
+
+Dart_Handle Dart_IntegerFitsIntoInt64(Dart_Handle integer, bool* fits) {
+  return Dart_IntegerFitsIntoInt64Fn(integer, fits);
+}
+
+Dart_Handle Dart_IntegerFitsIntoUint64(Dart_Handle integer, bool* fits) {
+  return Dart_IntegerFitsIntoUint64Fn(integer, fits);
+}
+
+Dart_Handle Dart_NewInteger(int64_t value) {
+  return Dart_NewIntegerFn(value);
+}
+
+Dart_Handle Dart_NewIntegerFromUint64(uint64_t value) {
+  return Dart_NewIntegerFromUint64Fn(value);
+}
+
+Dart_Handle Dart_NewIntegerFromHexCString(const char* value) {
+  return Dart_NewIntegerFromHexCStringFn(value);
+}
+
+Dart_Handle Dart_IntegerToInt64(Dart_Handle integer, int64_t* value) {
+  return Dart_IntegerToInt64Fn(integer, value);
+}
+
+Dart_Handle Dart_IntegerToUint64(Dart_Handle integer, uint64_t* value) {
+  return Dart_IntegerToUint64Fn(integer, value);
+}
+
+Dart_Handle Dart_IntegerToHexCString(Dart_Handle integer, const char** value) {
+  return Dart_IntegerToHexCStringFn(integer, value);
+}
+
+Dart_Handle Dart_NewDouble(double value) {
+  return Dart_NewDoubleFn(value);
+}
+
+Dart_Handle Dart_DoubleValue(Dart_Handle double_obj, double* value) {
+  return Dart_DoubleValueFn(double_obj, value);
+}
+
+Dart_Handle Dart_GetStaticMethodClosure(Dart_Handle library,
+                                        Dart_Handle cls_type,
+                                        Dart_Handle function_name) {
+  return Dart_GetStaticMethodClosureFn(library, cls_type, function_name);
+}
+
+Dart_Handle Dart_True() {
+  return Dart_TrueFn();
+}
+
+Dart_Handle Dart_False() {
+  return Dart_FalseFn();
+}
+
+Dart_Handle Dart_NewBoolean(bool value) {
+  return Dart_NewBooleanFn(value);
+}
+
+Dart_Handle Dart_BooleanValue(Dart_Handle boolean_obj, bool* value) {
+  return Dart_BooleanValueFn(boolean_obj, value);
+}
+
+Dart_Handle Dart_StringLength(Dart_Handle str, intptr_t* length) {
+  return Dart_StringLengthFn(str, length);
+}
+
+Dart_Handle Dart_StringUTF8Length(Dart_Handle str, intptr_t* length) {
+  return Dart_StringUTF8LengthFn(str, length);
+}
+
+Dart_Handle Dart_NewStringFromCString(const char* str) {
+  return Dart_NewStringFromCStringFn(str);
+}
+
+Dart_Handle Dart_NewStringFromUTF8(const uint8_t* utf8_array, intptr_t length) {
+  return Dart_NewStringFromUTF8Fn(utf8_array, length);
+}
+
+Dart_Handle Dart_NewStringFromUTF16(const uint16_t* utf16_array,
+                                    intptr_t length) {
+  return Dart_NewStringFromUTF16Fn(utf16_array, length);
+}
+
+Dart_Handle Dart_NewStringFromUTF32(const int32_t* utf32_array,
+                                    intptr_t length) {
+  return Dart_NewStringFromUTF32Fn(utf32_array, length);
+}
+
+Dart_Handle Dart_StringToCString(Dart_Handle str, const char** cstr) {
+  return Dart_StringToCStringFn(str, cstr);
+}
+
+Dart_Handle Dart_StringToUTF8(Dart_Handle str,
+                              uint8_t** utf8_array,
+                              intptr_t* length) {
+  return Dart_StringToUTF8Fn(str, utf8_array, length);
+}
+
+Dart_Handle Dart_CopyUTF8EncodingOfString(Dart_Handle str,
+                                          uint8_t* utf8_array,
+                                          intptr_t length) {
+  return Dart_CopyUTF8EncodingOfStringFn(str, utf8_array, length);
+}
+
+Dart_Handle Dart_StringToLatin1(Dart_Handle str,
+                                uint8_t* latin1_array,
+                                intptr_t* length) {
+  return Dart_StringToLatin1Fn(str, latin1_array, length);
+}
+
+Dart_Handle Dart_StringToUTF16(Dart_Handle str,
+                               uint16_t* utf16_array,
+                               intptr_t* length) {
+  return Dart_StringToUTF16Fn(str, utf16_array, length);
+}
+
+Dart_Handle Dart_StringStorageSize(Dart_Handle str, intptr_t* size) {
+  return Dart_StringStorageSizeFn(str, size);
+}
+
+Dart_Handle Dart_StringGetProperties(Dart_Handle str,
+                                     intptr_t* char_size,
+                                     intptr_t* str_len,
+                                     void** peer) {
+  return Dart_StringGetPropertiesFn(str, char_size, str_len, peer);
+}
+
+Dart_Handle Dart_NewList(intptr_t length) {
+  return Dart_NewListFn(length);
+}
+
+Dart_Handle Dart_NewListOfType(Dart_Handle element_type, intptr_t length) {
+  return Dart_NewListOfTypeFn(element_type, length);
+}
+
+Dart_Handle Dart_NewListOfTypeFilled(Dart_Handle element_type,
+                                     Dart_Handle fill_object,
+                                     intptr_t length) {
+  return Dart_NewListOfTypeFilledFn(element_type, fill_object, length);
+}
+
+Dart_Handle Dart_ListLength(Dart_Handle list, intptr_t* length) {
+  return Dart_ListLengthFn(list, length);
+}
+
+Dart_Handle Dart_ListGetAt(Dart_Handle list, intptr_t index) {
+  return Dart_ListGetAtFn(list, index);
+}
+
+Dart_Handle Dart_ListGetRange(Dart_Handle list,
+                              intptr_t offset,
+                              intptr_t length,
+                              Dart_Handle* result) {
+  return Dart_ListGetRangeFn(list, offset, length, result);
+}
+
+Dart_Handle Dart_ListSetAt(Dart_Handle list,
+                           intptr_t index,
+                           Dart_Handle value) {
+  return Dart_ListSetAtFn(list, index, value);
+}
+
+Dart_Handle Dart_ListGetAsBytes(Dart_Handle list,
+                                intptr_t offset,
+                                uint8_t* native_array,
+                                intptr_t length) {
+  return Dart_ListGetAsBytesFn(list, offset, native_array, length);
+}
+
+Dart_Handle Dart_ListSetAsBytes(Dart_Handle list,
+                                intptr_t offset,
+                                const uint8_t* native_array,
+                                intptr_t length) {
+  return Dart_ListSetAsBytesFn(list, offset, native_array, length);
+}
+
+Dart_Handle Dart_MapGetAt(Dart_Handle map, Dart_Handle key) {
+  return Dart_MapGetAtFn(map, key);
+}
+
+Dart_Handle Dart_MapContainsKey(Dart_Handle map, Dart_Handle key) {
+  return Dart_MapContainsKeyFn(map, key);
+}
+
+Dart_Handle Dart_MapKeys(Dart_Handle map) {
+  return Dart_MapKeysFn(map);
+}
+
+Dart_TypedData_Type Dart_GetTypeOfTypedData(Dart_Handle object) {
+  return Dart_GetTypeOfTypedDataFn(object);
+}
+
+Dart_TypedData_Type Dart_GetTypeOfExternalTypedData(Dart_Handle object) {
+  return Dart_GetTypeOfExternalTypedDataFn(object);
+}
+
+Dart_Handle Dart_NewTypedData(Dart_TypedData_Type type, intptr_t length) {
+  return Dart_NewTypedDataFn(type, length);
+}
+
+Dart_Handle Dart_NewExternalTypedData(Dart_TypedData_Type type,
+                                      void* data,
+                                      intptr_t length) {
+  return Dart_NewExternalTypedDataFn(type, data, length);
+}
+
+Dart_Handle Dart_NewExternalTypedDataWithFinalizer(
+    Dart_TypedData_Type type,
+    void* data,
+    intptr_t length,
+    void* peer,
+    intptr_t external_allocation_size,
+    Dart_HandleFinalizer callback) {
+  return Dart_NewExternalTypedDataWithFinalizerFn(
+      type, data, length, peer, external_allocation_size, callback);
+}
+
+Dart_Handle Dart_NewUnmodifiableExternalTypedDataWithFinalizer(
+    Dart_TypedData_Type type,
+    const void* data,
+    intptr_t length,
+    void* peer,
+    intptr_t external_allocation_size,
+    Dart_HandleFinalizer callback) {
+  return Dart_NewUnmodifiableExternalTypedDataWithFinalizerFn(
+      type, data, length, peer, external_allocation_size, callback);
+}
+
+Dart_Handle Dart_NewByteBuffer(Dart_Handle typed_data) {
+  return Dart_NewByteBufferFn(typed_data);
+}
+
+Dart_Handle Dart_TypedDataAcquireData(Dart_Handle object,
+                                      Dart_TypedData_Type* type,
+                                      void** data,
+                                      intptr_t* len) {
+  return Dart_TypedDataAcquireDataFn(object, type, data, len);
+}
+
+Dart_Handle Dart_TypedDataReleaseData(Dart_Handle object) {
+  return Dart_TypedDataReleaseDataFn(object);
+}
+
+Dart_Handle Dart_GetDataFromByteBuffer(Dart_Handle byte_buffer) {
+  return Dart_GetDataFromByteBufferFn(byte_buffer);
+}
+
+Dart_Handle Dart_New(Dart_Handle type,
+                     Dart_Handle constructor_name,
+                     int number_of_arguments,
+                     Dart_Handle* arguments) {
+  return Dart_NewFn(type, constructor_name, number_of_arguments, arguments);
+}
+
+Dart_Handle Dart_Allocate(Dart_Handle type) {
+  return Dart_AllocateFn(type);
+}
+
+Dart_Handle Dart_AllocateWithNativeFields(Dart_Handle type,
+                                          intptr_t num_native_fields,
+                                          const intptr_t* native_fields) {
+  return Dart_AllocateWithNativeFieldsFn(type, num_native_fields,
+                                         native_fields);
+}
+
+Dart_Handle Dart_Invoke(Dart_Handle target,
+                        Dart_Handle name,
+                        int number_of_arguments,
+                        Dart_Handle* arguments) {
+  return Dart_InvokeFn(target, name, number_of_arguments, arguments);
+}
+
+Dart_Handle Dart_InvokeClosure(Dart_Handle closure,
+                               int number_of_arguments,
+                               Dart_Handle* arguments) {
+  return Dart_InvokeClosureFn(closure, number_of_arguments, arguments);
+}
+
+Dart_Handle Dart_InvokeConstructor(Dart_Handle object,
+                                   Dart_Handle name,
+                                   int number_of_arguments,
+                                   Dart_Handle* arguments) {
+  return Dart_InvokeConstructorFn(object, name, number_of_arguments, arguments);
+}
+
+Dart_Handle Dart_GetField(Dart_Handle container, Dart_Handle name) {
+  return Dart_GetFieldFn(container, name);
+}
+
+Dart_Handle Dart_SetField(Dart_Handle container,
+                          Dart_Handle name,
+                          Dart_Handle value) {
+  return Dart_SetFieldFn(container, name, value);
+}
+
+Dart_Handle Dart_ThrowException(Dart_Handle exception) {
+  return Dart_ThrowExceptionFn(exception);
+}
+
+Dart_Handle Dart_ReThrowException(Dart_Handle exception,
+                                  Dart_Handle stacktrace) {
+  return Dart_ReThrowExceptionFn(exception, stacktrace);
+}
+
+Dart_Handle Dart_GetNativeInstanceFieldCount(Dart_Handle obj, int* count) {
+  return Dart_GetNativeInstanceFieldCountFn(obj, count);
+}
+
+Dart_Handle Dart_GetNativeInstanceField(Dart_Handle obj,
+                                        int index,
+                                        intptr_t* value) {
+  return Dart_GetNativeInstanceFieldFn(obj, index, value);
+}
+
+Dart_Handle Dart_SetNativeInstanceField(Dart_Handle obj,
+                                        int index,
+                                        intptr_t value) {
+  return Dart_SetNativeInstanceFieldFn(obj, index, value);
+}
+
+void* Dart_GetNativeIsolateGroupData(Dart_NativeArguments args) {
+  return Dart_GetNativeIsolateGroupDataFn(args);
+}
+
+Dart_Handle Dart_GetNativeArguments(
+    Dart_NativeArguments args,
+    int num_arguments,
+    const Dart_NativeArgument_Descriptor* arg_descriptors,
+    Dart_NativeArgument_Value* arg_values) {
+  return Dart_GetNativeArgumentsFn(args, num_arguments, arg_descriptors,
+                                   arg_values);
+}
+
+Dart_Handle Dart_GetNativeArgument(Dart_NativeArguments args, int index) {
+  return Dart_GetNativeArgumentFn(args, index);
+}
+
+int Dart_GetNativeArgumentCount(Dart_NativeArguments args) {
+  return Dart_GetNativeArgumentCountFn(args);
+}
+
+Dart_Handle Dart_GetNativeFieldsOfArgument(Dart_NativeArguments args,
+                                           int arg_index,
+                                           int num_fields,
+                                           intptr_t* field_values) {
+  return Dart_GetNativeFieldsOfArgumentFn(args, arg_index, num_fields,
+                                          field_values);
+}
+
+Dart_Handle Dart_GetNativeReceiver(Dart_NativeArguments args, intptr_t* value) {
+  return Dart_GetNativeReceiverFn(args, value);
+}
+
+Dart_Handle Dart_GetNativeStringArgument(Dart_NativeArguments args,
+                                         int arg_index,
+                                         void** peer) {
+  return Dart_GetNativeStringArgumentFn(args, arg_index, peer);
+}
+
+Dart_Handle Dart_GetNativeIntegerArgument(Dart_NativeArguments args,
+                                          int index,
+                                          int64_t* value) {
+  return Dart_GetNativeIntegerArgumentFn(args, index, value);
+}
+
+Dart_Handle Dart_GetNativeBooleanArgument(Dart_NativeArguments args,
+                                          int index,
+                                          bool* value) {
+  return Dart_GetNativeBooleanArgumentFn(args, index, value);
+}
+
+Dart_Handle Dart_GetNativeDoubleArgument(Dart_NativeArguments args,
+                                         int index,
+                                         double* value) {
+  return Dart_GetNativeDoubleArgumentFn(args, index, value);
+}
+
+void Dart_SetReturnValue(Dart_NativeArguments args, Dart_Handle retval) {
+  Dart_SetReturnValueFn(args, retval);
+}
+
+void Dart_SetWeakHandleReturnValue(Dart_NativeArguments args,
+                                   Dart_WeakPersistentHandle rval) {
+  Dart_SetWeakHandleReturnValueFn(args, rval);
+}
+
+void Dart_SetBooleanReturnValue(Dart_NativeArguments args, bool retval) {
+  Dart_SetBooleanReturnValueFn(args, retval);
+}
+
+void Dart_SetIntegerReturnValue(Dart_NativeArguments args, int64_t retval) {
+  Dart_SetIntegerReturnValueFn(args, retval);
+}
+
+void Dart_SetDoubleReturnValue(Dart_NativeArguments args, double retval) {
+  Dart_SetDoubleReturnValueFn(args, retval);
+}
+
+Dart_Handle Dart_SetEnvironmentCallback(Dart_EnvironmentCallback callback) {
+  return Dart_SetEnvironmentCallbackFn(callback);
+}
+
+Dart_Handle Dart_SetNativeResolver(Dart_Handle library,
+                                   Dart_NativeEntryResolver resolver,
+                                   Dart_NativeEntrySymbol symbol) {
+  return Dart_SetNativeResolverFn(library, resolver, symbol);
+}
+
+Dart_Handle Dart_GetNativeResolver(Dart_Handle library,
+                                   Dart_NativeEntryResolver* resolver) {
+  return Dart_GetNativeResolverFn(library, resolver);
+}
+
+Dart_Handle Dart_GetNativeSymbol(Dart_Handle library,
+                                 Dart_NativeEntrySymbol* resolver) {
+  return Dart_GetNativeSymbolFn(library, resolver);
+}
+
+Dart_Handle Dart_SetFfiNativeResolver(Dart_Handle library,
+                                      Dart_FfiNativeResolver resolver) {
+  return Dart_SetFfiNativeResolverFn(library, resolver);
+}
+
+void Dart_InitializeNativeAssetsResolver(NativeAssetsApi* native_assets_api) {
+  Dart_InitializeNativeAssetsResolverFn(native_assets_api);
+}
+
+Dart_Handle Dart_SetLibraryTagHandler(Dart_LibraryTagHandler handler) {
+  return Dart_SetLibraryTagHandlerFn(handler);
+}
+
+Dart_Handle Dart_SetDeferredLoadHandler(Dart_DeferredLoadHandler handler) {
+  return Dart_SetDeferredLoadHandlerFn(handler);
+}
+
+Dart_Handle Dart_DeferredLoadComplete(intptr_t loading_unit_id,
+                                      const uint8_t* snapshot_data,
+                                      const uint8_t* snapshot_instructions) {
+  return Dart_DeferredLoadCompleteFn(loading_unit_id, snapshot_data,
+                                     snapshot_instructions);
+}
+
+Dart_Handle Dart_DeferredLoadCompleteError(intptr_t loading_unit_id,
+                                           const char* error_message,
+                                           bool transient) {
+  return Dart_DeferredLoadCompleteErrorFn(loading_unit_id, error_message,
+                                          transient);
+}
+
+Dart_Handle Dart_LoadScriptFromKernel(const uint8_t* kernel_buffer,
+                                      intptr_t kernel_size) {
+  return Dart_LoadScriptFromKernelFn(kernel_buffer, kernel_size);
+}
+
+Dart_Handle Dart_RootLibrary() {
+  return Dart_RootLibraryFn();
+}
+
+Dart_Handle Dart_SetRootLibrary(Dart_Handle library) {
+  return Dart_SetRootLibraryFn(library);
+}
+
+Dart_Handle Dart_GetType(Dart_Handle library,
+                         Dart_Handle class_name,
+                         intptr_t number_of_type_arguments,
+                         Dart_Handle* type_arguments) {
+  return Dart_GetTypeFn(library, class_name, number_of_type_arguments,
+                        type_arguments);
+}
+
+Dart_Handle Dart_GetNullableType(Dart_Handle library,
+                                 Dart_Handle class_name,
+                                 intptr_t number_of_type_arguments,
+                                 Dart_Handle* type_arguments) {
+  return Dart_GetNullableTypeFn(library, class_name, number_of_type_arguments,
+                                type_arguments);
+}
+
+Dart_Handle Dart_GetNonNullableType(Dart_Handle library,
+                                    Dart_Handle class_name,
+                                    intptr_t number_of_type_arguments,
+                                    Dart_Handle* type_arguments) {
+  return Dart_GetNonNullableTypeFn(library, class_name,
+                                   number_of_type_arguments, type_arguments);
+}
+
+Dart_Handle Dart_TypeToNullableType(Dart_Handle type) {
+  return Dart_TypeToNullableTypeFn(type);
+}
+
+Dart_Handle Dart_TypeToNonNullableType(Dart_Handle type) {
+  return Dart_TypeToNonNullableTypeFn(type);
+}
+
+Dart_Handle Dart_IsNullableType(Dart_Handle type, bool* result) {
+  return Dart_IsNullableTypeFn(type, result);
+}
+
+Dart_Handle Dart_IsNonNullableType(Dart_Handle type, bool* result) {
+  return Dart_IsNonNullableTypeFn(type, result);
+}
+
+Dart_Handle Dart_GetClass(Dart_Handle library, Dart_Handle class_name) {
+  return Dart_GetClassFn(library, class_name);
+}
+
+Dart_Handle Dart_LibraryUrl(Dart_Handle library) {
+  return Dart_LibraryUrlFn(library);
+}
+
+Dart_Handle Dart_LibraryResolvedUrl(Dart_Handle library) {
+  return Dart_LibraryResolvedUrlFn(library);
+}
+
+Dart_Handle Dart_GetLoadedLibraries() {
+  return Dart_GetLoadedLibrariesFn();
+}
+
+Dart_Handle Dart_LookupLibrary(Dart_Handle url) {
+  return Dart_LookupLibraryFn(url);
+}
+
+Dart_Handle Dart_LibraryHandleError(Dart_Handle library, Dart_Handle error) {
+  return Dart_LibraryHandleErrorFn(library, error);
+}
+
+Dart_Handle Dart_LoadLibraryFromKernel(const uint8_t* kernel_buffer,
+                                       intptr_t kernel_buffer_size) {
+  return Dart_LoadLibraryFromKernelFn(kernel_buffer, kernel_buffer_size);
+}
+
+Dart_Handle Dart_LoadLibrary(Dart_Handle kernel_buffer) {
+  return Dart_LoadLibraryFn(kernel_buffer);
+}
+
+Dart_Handle Dart_FinalizeLoading(bool complete_futures) {
+  return Dart_FinalizeLoadingFn(complete_futures);
+}
+
+Dart_Handle Dart_GetPeer(Dart_Handle object, void** peer) {
+  return Dart_GetPeerFn(object, peer);
+}
+
+Dart_Handle Dart_SetPeer(Dart_Handle object, void* peer) {
+  return Dart_SetPeerFn(object, peer);
+}
+
+bool Dart_IsKernelIsolate(Dart_Isolate isolate) {
+  return Dart_IsKernelIsolateFn(isolate);
+}
+
+bool Dart_KernelIsolateIsRunning() {
+  return Dart_KernelIsolateIsRunningFn();
+}
+
+Dart_Port Dart_KernelPort() {
+  return Dart_KernelPortFn();
+}
+
+Dart_KernelCompilationResult Dart_CompileToKernel(
+    const char* script_uri,
+    const uint8_t* platform_kernel,
+    const intptr_t platform_kernel_size,
+    bool incremental_compile,
+    bool snapshot_compile,
+    bool embed_sources,
+    const char* package_config,
+    Dart_KernelCompilationVerbosityLevel verbosity) {
+  return Dart_CompileToKernelFn(
+      script_uri, platform_kernel, platform_kernel_size, incremental_compile,
+      snapshot_compile, embed_sources, package_config, verbosity);
+}
+
+Dart_KernelCompilationResult Dart_KernelListDependencies() {
+  return Dart_KernelListDependenciesFn();
+}
+
+void Dart_SetDartLibrarySourcesKernel(const uint8_t* platform_kernel,
+                                      const intptr_t platform_kernel_size) {
+  Dart_SetDartLibrarySourcesKernelFn(platform_kernel, platform_kernel_size);
+}
+
+bool Dart_DetectNullSafety(const char* script_uri,
+                           const char* package_config,
+                           const char* original_working_directory,
+                           const uint8_t* snapshot_data,
+                           const uint8_t* snapshot_instructions,
+                           const uint8_t* kernel_buffer,
+                           intptr_t kernel_buffer_size) {
+  return Dart_DetectNullSafetyFn(
+      script_uri, package_config, original_working_directory, snapshot_data,
+      snapshot_instructions, kernel_buffer, kernel_buffer_size);
+}
+
+bool Dart_IsServiceIsolate(Dart_Isolate isolate) {
+  return Dart_IsServiceIsolateFn(isolate);
+}
+
+bool Dart_WriteProfileToTimeline(Dart_Port main_port, char** error) {
+  return Dart_WriteProfileToTimelineFn(main_port, error);
+}
+
+Dart_Handle Dart_Precompile() {
+  return Dart_PrecompileFn();
+}
+
+Dart_Handle Dart_LoadingUnitLibraryUris(intptr_t loading_unit_id) {
+  return Dart_LoadingUnitLibraryUrisFn(loading_unit_id);
+}
+
+Dart_Handle Dart_CreateAppAOTSnapshotAsAssembly(
+    Dart_StreamingWriteCallback callback,
+    void* callback_data,
+    bool stripped,
+    void* debug_callback_data) {
+  return Dart_CreateAppAOTSnapshotAsAssemblyFn(callback, callback_data,
+                                               stripped, debug_callback_data);
+}
+
+Dart_Handle Dart_CreateAppAOTSnapshotAsAssemblies(
+    Dart_CreateLoadingUnitCallback next_callback,
+    void* next_callback_data,
+    bool stripped,
+    Dart_StreamingWriteCallback write_callback,
+    Dart_StreamingCloseCallback close_callback) {
+  return Dart_CreateAppAOTSnapshotAsAssembliesFn(
+      next_callback, next_callback_data, stripped, write_callback,
+      close_callback);
+}
+
+Dart_Handle Dart_CreateAppAOTSnapshotAsElf(Dart_StreamingWriteCallback callback,
+                                           void* callback_data,
+                                           bool stripped,
+                                           void* debug_callback_data) {
+  return Dart_CreateAppAOTSnapshotAsElfFn(callback, callback_data, stripped,
+                                          debug_callback_data);
+}
+
+Dart_Handle Dart_CreateAppAOTSnapshotAsElfs(
+    Dart_CreateLoadingUnitCallback next_callback,
+    void* next_callback_data,
+    bool stripped,
+    Dart_StreamingWriteCallback write_callback,
+    Dart_StreamingCloseCallback close_callback) {
+  return Dart_CreateAppAOTSnapshotAsElfsFn(next_callback, next_callback_data,
+                                           stripped, write_callback,
+                                           close_callback);
+}
+
+Dart_Handle Dart_CreateVMAOTSnapshotAsAssembly(
+    Dart_StreamingWriteCallback callback,
+    void* callback_data) {
+  return Dart_CreateVMAOTSnapshotAsAssemblyFn(callback, callback_data);
+}
+
+Dart_Handle Dart_SortClasses() {
+  return Dart_SortClassesFn();
+}
+
+Dart_Handle Dart_CreateAppJITSnapshotAsBlobs(
+    uint8_t** isolate_snapshot_data_buffer,
+    intptr_t* isolate_snapshot_data_size,
+    uint8_t** isolate_snapshot_instructions_buffer,
+    intptr_t* isolate_snapshot_instructions_size) {
+  return Dart_CreateAppJITSnapshotAsBlobsFn(
+      isolate_snapshot_data_buffer, isolate_snapshot_data_size,
+      isolate_snapshot_instructions_buffer, isolate_snapshot_instructions_size);
+}
+
+Dart_Handle Dart_GetObfuscationMap(uint8_t** buffer, intptr_t* buffer_length) {
+  return Dart_GetObfuscationMapFn(buffer, buffer_length);
+}
+
+bool Dart_IsPrecompiledRuntime() {
+  return Dart_IsPrecompiledRuntimeFn();
+}
+
+void Dart_DumpNativeStackTrace(void* context) {
+  Dart_DumpNativeStackTraceFn(context);
+}
+
+void Dart_PrepareToAbort() {
+  Dart_PrepareToAbortFn();
+}
+
+void Dart_SetDwarfStackTraceFootnoteCallback(
+    Dart_DwarfStackTraceFootnoteCallback callback) {
+  Dart_SetDwarfStackTraceFootnoteCallbackFn(callback);
+}
+
+bool Dart_PostCObject(Dart_Port port_id, Dart_CObject* message) {
+  return Dart_PostCObjectFn(port_id, message);
+}
+
+bool Dart_PostInteger(Dart_Port port_id, int64_t message) {
+  return Dart_PostIntegerFn(port_id, message);
+}
+
+Dart_Port Dart_NewNativePort(const char* name,
+                             Dart_NativeMessageHandler handler,
+                             bool handle_concurrently) {
+  return Dart_NewNativePortFn(name, handler, handle_concurrently);
+}
+
+Dart_Port Dart_NewConcurrentNativePort(const char* name,
+                                       Dart_NativeMessageHandler handler,
+                                       intptr_t max_concurrency) {
+  return Dart_NewConcurrentNativePortFn(name, handler, max_concurrency);
+}
+
+bool Dart_CloseNativePort(Dart_Port native_port_id) {
+  return Dart_CloseNativePortFn(native_port_id);
+}
+
+Dart_Handle Dart_CompileAll() {
+  return Dart_CompileAllFn();
+}
+
+Dart_Handle Dart_FinalizeAllClasses() {
+  return Dart_FinalizeAllClassesFn();
+}
+
+void* Dart_ExecuteInternalCommand(const char* command, void* arg) {
+  return Dart_ExecuteInternalCommandFn(command, arg);
+}
diff --git a/runtime/bin/ffi_test/ffi_test_functions_vmspecific.cc b/runtime/bin/ffi_test/ffi_test_functions_vmspecific.cc
index 351005d..42ade11 100644
--- a/runtime/bin/ffi_test/ffi_test_functions_vmspecific.cc
+++ b/runtime/bin/ffi_test/ffi_test_functions_vmspecific.cc
@@ -33,9 +33,6 @@
 #include <iostream>
 #include <limits>
 
-// TODO(dartbug.com/40579): This requires static linking to either link
-// dart.exe or dartaotruntime.exe on Windows.
-// The sample currently fails on Windows in AOT mode.
 #include "include/dart_api.h"
 #include "include/dart_native_api.h"
 
diff --git a/runtime/tests/vm/vm.status b/runtime/tests/vm/vm.status
index 4f6d722..b2dea92 100644
--- a/runtime/tests/vm/vm.status
+++ b/runtime/tests/vm/vm.status
@@ -279,9 +279,6 @@
 dart/regress_48196_test: SkipSlow
 dart/regress_52703_test: SkipSlow
 
-[ $compiler == dartkp && $system == windows ]
-dart/isolates/dart_api_create_lightweight_isolate_test: SkipByDesign # https://dartbug.com/40579 Dart C API symbols not available.
-
 [ $compiler == dartkp && $simulator ]
 dart/awaiter_stacks/stream_methods_test/1: Pass, Slow
 dart/isolates/fast_object_copy2_test*: Skip # Uses ffi which is not available on simulated architectures
diff --git a/runtime/tools/generate_dart_api_win_c.dart b/runtime/tools/generate_dart_api_win_c.dart
new file mode 100644
index 0000000..9e59249
--- /dev/null
+++ b/runtime/tools/generate_dart_api_win_c.dart
@@ -0,0 +1,214 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:io';
+import 'dart:ffi';
+
+final repoRoot = File.fromUri(Platform.script).parent.parent.parent.path;
+final runtimeRoot = '$repoRoot/runtime';
+final buildtoolsRoot = '$repoRoot/buildtools';
+final clangBinDir =
+    '$buildtoolsRoot/$currentPlatformBuildtoolsSubdir/clang/bin';
+final clangFormatBin = '$clangBinDir/clang-format';
+
+final currentPlatformBuildtoolsSubdir = switch (Abi.current()) {
+  Abi.macosX64 => 'mac-x64',
+  Abi.macosArm64 => 'mac-arm64',
+  Abi.linuxX64 => 'linux-x64',
+  Abi.linuxArm64 => 'linux-arm64',
+  Abi.windowsX64 => 'win-x64',
+  Abi.windowsArm64 => 'win-arm64',
+  _ => throw UnimplementedError(),
+};
+
+void main(List<String> args) {
+  final checkUpToDate = args.contains('--check-up-to-date');
+
+  final dartApiHFile = File('$runtimeRoot/include/dart_api.h');
+  final dartNativeApiHFile = File('$runtimeRoot/include/dart_native_api.h');
+  final dartApiWinCFile = File('$runtimeRoot/bin/dart_api_win.c');
+  final dartApiWinCTmpFile = File('$runtimeRoot/bin/dart_api_win_tmp.c');
+  final dartApiHContents = dartApiHFile.readAsStringSync();
+  final dartNativeApiHContents = dartNativeApiHFile.readAsStringSync();
+
+  final procedureRegexp = RegExp(
+    r'(DART_\w+\s+)+(?<returnType>[\w\s\*]+)\s+(?<name>\w+)\((?<arguments>[^)]*)\);',
+    multiLine: true,
+  );
+
+  final matches = [
+    ...procedureRegexp.allMatches(dartApiHContents),
+    ...procedureRegexp.allMatches(dartNativeApiHContents),
+  ];
+
+  final procedures = <Procedure>[];
+
+  for (final match in matches) {
+    final returnType = match.namedGroup('returnType')!;
+    final name = match.namedGroup('name')!;
+    final argumentsString = match.namedGroup('arguments') ?? '';
+    final argumentList =
+        argumentsString.split(',').where((arg) => arg != 'void').map((arg) {
+          final parts = arg.trim().split(' ');
+          return (
+            type: parts.sublist(0, parts.length - 1).join(' '),
+            name: parts[parts.length - 1],
+          );
+        }).toList();
+    procedures.add((
+      name: name,
+      returnType: returnType,
+      arguments: argumentList,
+    ));
+  }
+
+  final buffer = StringBuffer();
+
+  buffer.writeln('''
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// DO NOT EDIT. This file is generated by runtime/tools/generate_dart_api_win_c.dart.
+
+#include <windows.h>
+
+#include <include/dart_api.h>
+#include <include/dart_native_api.h>
+
+''');
+
+  // Generate typedefs for all procedures.
+  for (final procedure in procedures) {
+    buffer.write('typedef ');
+    buffer.write(procedure.returnType);
+    buffer.write(' (*');
+    buffer.write(procedure.typedefName);
+    buffer.write(')(');
+    for (final (i, argument) in procedure.arguments.indexed) {
+      buffer.write(argument.type);
+      if (i < procedure.arguments.length - 1) {
+        buffer.write(', ');
+      }
+    }
+    buffer.writeln(');');
+  }
+
+  buffer.writeln();
+
+  // Generate function pointers for all procedures.
+  for (final procedure in procedures) {
+    buffer.write('static ');
+    buffer.write(procedure.typedefName);
+    buffer.write(' ');
+    buffer.write(procedure.functionPointerName);
+    buffer.writeln(' = NULL;');
+  }
+
+  buffer.writeln();
+
+  // Generate the DllMain function that initializes all function pointers.
+  buffer.writeln('''
+BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
+  if (fdwReason == DLL_PROCESS_ATTACH) {
+    HMODULE process = GetModuleHandle(NULL);
+''');
+
+  for (final procedure in procedures) {
+    buffer.write('    ');
+    buffer.write(procedure.functionPointerName);
+    buffer.write(' = (');
+    buffer.write(procedure.typedefName);
+    buffer.write(') GetProcAddress(process, "');
+    buffer.write(procedure.name);
+    buffer.writeln('");');
+  }
+
+  buffer.writeln('''
+  }
+
+  return TRUE;
+}''');
+
+  buffer.writeln();
+
+  // Generate redirecting implementations for all procedures.
+  for (final procedure in procedures) {
+    final (:name, :returnType, :arguments) = procedure;
+    buffer.write(returnType);
+    buffer.write(' ');
+    buffer.write(name);
+    buffer.write('(');
+    for (final (i, (:name, :type)) in arguments.indexed) {
+      buffer.write(type);
+      buffer.write(' ');
+      buffer.write(name);
+      if (i < arguments.length - 1) {
+        buffer.write(', ');
+      }
+    }
+    buffer.writeln(') {');
+    buffer.write('  ');
+    if (procedure.returnType != 'void') {
+      buffer.write('return ');
+    }
+    buffer.write(procedure.functionPointerName);
+    buffer.write('(');
+    for (final (i, argument) in arguments.indexed) {
+      buffer.write(argument.name);
+      if (i < arguments.length - 1) {
+        buffer.write(', ');
+      }
+    }
+    buffer.writeln(');');
+    buffer.writeln('}');
+    buffer.writeln();
+  }
+
+  buffer.writeln();
+
+  dartApiWinCTmpFile.writeAsStringSync(buffer.toString());
+
+  try {
+    // Run clang-format on the generated file.
+    final clangFormatResult = Process.runSync(
+      clangFormatBin,
+      ['-i', dartApiWinCTmpFile.path],
+      // Allows us to specify the path to the clang-format binary without the
+      // .exe extension on Windows.
+      runInShell: Platform.isWindows,
+    );
+    if (clangFormatResult.exitCode != 0) {
+      print(clangFormatResult.stdout);
+      print(clangFormatResult.stderr);
+      exitCode = 1;
+    } else {
+      final changed =
+          !dartApiWinCFile.existsSync() ||
+          dartApiWinCTmpFile.readAsStringSync() !=
+              dartApiWinCFile.readAsStringSync();
+      if (changed) {
+        if (checkUpToDate) {
+          exitCode = 1;
+        } else {
+          dartApiWinCTmpFile.copySync(dartApiWinCFile.path);
+        }
+      }
+    }
+  } finally {
+    dartApiWinCTmpFile.deleteSync();
+  }
+}
+
+typedef Procedure =
+    ({
+      String name,
+      String returnType,
+      List<({String name, String type})> arguments,
+    });
+
+extension on Procedure {
+  String get typedefName => '${name}Type';
+  String get functionPointerName => '${name}Fn';
+}
diff --git a/tests/co19/co19-kernel.status b/tests/co19/co19-kernel.status
index 817ffb3..7a01631 100644
--- a/tests/co19/co19-kernel.status
+++ b/tests/co19/co19-kernel.status
@@ -22,9 +22,6 @@
 LibTest/core/List/List_class_A01_t02: Slow, Pass
 LibTest/core/List/List_class_A01_t03: Slow, Pass
 
-[ $runtime == dart_precompiled && $system == windows ]
-LanguageFeatures/FinalizationRegistry/ffi/*: SkipByDesign # https://dartbug.com/40579 Dart C API symbols not available.
-
 [ $runtime == dart_precompiled && $simulator ]
 LibTest/collection/ListBase/ListBase_class_A01_t01: SkipSlow # Issue 43036
 LibTest/collection/ListMixin/ListMixin_class_A01_t01: SkipSlow # Issue 43036
diff --git a/tests/ffi/ffi.status b/tests/ffi/ffi.status
index e1b832b..f6c3889 100644
--- a/tests/ffi/ffi.status
+++ b/tests/ffi/ffi.status
@@ -79,18 +79,6 @@
 [ $compiler != dart2analyzer && $compiler != fasta && $runtime != dart_precompiled && $runtime != vm ]
 *: SkipByDesign # FFI is a VM-only feature. (This test suite is part of the default set.)
 
-[ $compiler == dartkp && $system == windows ]
-vmspecific_ffi_native_handles_test: SkipByDesign # Symbols are not exposed on purpose and are not linked in Windows Precompiled. dartbug.com/40579
-vmspecific_ffi_native_test: SkipByDesign # Symbols are not exposed on purpose and are not linked in Windows Precompiled. dartbug.com/40579
-vmspecific_function_gc_test: SkipByDesign # Symbols are not exposed on purpose and are not linked in Windows Precompiled. dartbug.com/40579
-vmspecific_handle_test: SkipByDesign # Symbols are not exposed on purpose and are not linked in Windows Precompiled. dartbug.com/40579
-vmspecific_object_gc_test: SkipByDesign # Symbols are not exposed on purpose and are not linked in Windows Precompiled. dartbug.com/40579
-vmspecific_regress_37100_test: SkipByDesign # Symbols are not exposed on purpose and are not linked in Windows Precompiled. dartbug.com/40579
-vmspecific_regress_37511_callbacks_test: SkipByDesign # Symbols are not exposed on purpose and are not linked in Windows Precompiled. dartbug.com/40579
-vmspecific_regress_37511_test: SkipByDesign # Symbols are not exposed on purpose and are not linked in Windows Precompiled. dartbug.com/40579
-vmspecific_regress_37780_test: SkipByDesign # Symbols are not exposed on purpose and are not linked in Windows Precompiled. dartbug.com/40579
-vmspecific_regress_51794_test: SkipByDesign # Symbols are not exposed on purpose and are not linked in Windows Precompiled. dartbug.com/40579
-
 # These tests trigger and catch an abort (intentionally) and terminate the VM.
 # They're incompatible with ASAN because not all memory is freed when aborting and
 # with AppJit because the abort the VM before it can generate a snapshot.
diff --git a/tests/ffi/vmspecific_leaf_call_test.dart b/tests/ffi/vmspecific_leaf_call_test.dart
index a8b71d0..34d6fca 100644
--- a/tests/ffi/vmspecific_leaf_call_test.dart
+++ b/tests/ffi/vmspecific_leaf_call_test.dart
@@ -18,7 +18,6 @@
 DynamicLibrary ffiTestFunctions = dlopenPlatformSpecific("ffi_test_functions");
 
 testLeafCall() {
-  // Note: This test currently fails on Windows AOT: https://dartbug.com/40579
   // Regular calls should transition generated -> native.
   final isThreadInGenerated = ffiTestFunctions
       .lookupFunction<Int8 Function(), int Function()>("IsThreadInGenerated");