在flutter的windows平台引入dll文件

1,818 阅读1分钟

在windows开发中可能需要引入一些dll文件,在flutter中最简单的方式就是直接把dll文件复制到build/windows/runner/Debug目录下就可以在debug模式下引入:

比如我这里引入的是一个helloword.dll,里面有一个void Hello()方法

final DynamicLibrary nativePointerTestLib = DynamicLibrary.open("helloworld.dll");

final void Function() helloWorld = nativePointerTestLib
    .lookup<NativeFunction<Void Function()>>('Hello')
    .asFunction();

// 调用方法
helloWorld();

但是这样每次都需要手动复制,非常麻烦。
比较简单的方法是使用官方推荐的方法,放到CMakelists.txt里面:
codelabs.developers.google.com/codelabs/fl…

创建项目: flutter create --template=plugin_ffi --platforms=android,ios,linux,macos,windows ffigen_app

生成的项目目录下,有一个windows文件夹,里面有一个 CMakeLists.txt, 直接运行example/libmain.dart, 会自动生成预设的ffigen_app.dll文件。此时如果我们需要引入别的dll文件,则只需要修改 CMakeLists.txt, 在下面添加:

set(ffigen_app_bundled_libraries
        "${CMAKE_CURRENT_SOURCE_DIR}/helloworld.dll"
        PARENT_SCOPE
        )

(假设helloworld.dll和CMakeLists同级)
保存后再重新运行,此时引入的helloworld.dll就会自动被拷贝到 Debug 目录下。如果运行 flutter build windows 则会被自动拷贝到 Release 目录下。

参考文章: