You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

添加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。示例代码:
    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'
        )
      );
    }
    
    这种修改仅对当前Flutter进程有效,不会影响系统全局PATH。

注意事项

  • 不推荐尝试静态链接Dart,Dart官方以动态链接dart.dll为标准模式,静态链接可能引发版本兼容问题。

内容的提问来源于stack exchange,提问作者Toasdn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 19:12:47