添加dart.lib依赖后Dart FFI加载DLL报错误码126求解决
解决Dart FFI依赖dart.lib后DLL加载失败(错误126)的方案
添加dart.lib后,你的C++ DLL会依赖对应的dart.dll,Windows加载器找不到这个依赖文件才会抛出错误126。以下是几个直接可行的调整方案:
方案一:复制dart.dll到DLL输出目录
- 从你的Dart SDK的
bin目录下找到dart.dll,将其复制到native/my_native_solution/x64/Release/目录,和my_native_library.dll放在同一层级。Windows加载器会优先在DLL所在目录查找依赖,这样就能正常加载你的库。
方案二:修改VS项目输出目录到dart.dll所在位置
- 打开Visual Studio的项目属性窗口,依次进入「配置属性 -> 常规 -> 输出目录」,将路径设置为Dart SDK的
bin/x64目录(比如C:/dart-sdk/bin/x64/,或用环境变量$(DartSdkRoot)/bin/x64/,需先配置DartSdkRoot环境变量)。这样编译生成的my_native_library.dll会直接输出到dart.dll的同目录,加载时自动找到依赖。
方案三:在Flutter代码中临时添加dart.dll路径到PATH
- 在加载你的DLL之前,把Dart SDK的
bin目录添加到系统PATH环境变量中,让加载器能找到dart.dll。示例代码:
这种修改仅对当前Flutter进程有效,不会影响系统全局PATH。import 'dart:ffi'; import 'dart:io'; import 'package:path/path.dart' as path; void loadMyNativeLib() { // 获取dart.exe所在目录,即dart.dll的位置 String dartBinPath = path.dirname(Platform.resolvedExecutable); // 临时更新PATH String currentPath = Platform.environment['PATH'] ?? ''; if (!currentPath.contains(dartBinPath)) { Platform.environment['PATH'] = '$dartBinPath;$currentPath'; } // 加载目标DLL final library = DynamicLibrary.open( path.join( Directory.current.path, 'native', 'my_native_solution', 'x64', 'Release', 'my_native_library.dll' ) ); }
注意事项
- 不推荐尝试静态链接Dart,Dart官方以动态链接
dart.dll为标准模式,静态链接可能引发版本兼容问题。
内容的提问来源于stack exchange,提问作者Toasdn
相关产品推荐
相关产品推荐

