新建一个插件
flutter create --template=plugin_ffi ldd_tsclib --platforms windows
ldd_tsclib: 插件名称
引入dll文件
把dll文件拷贝到插件的根目录下的windows文件夹内

配置cmakelists.txt
编辑ldd_tsclib/windows/CMakeLists.txt,在末尾加入
set(ldd_tsclib_bundled_libraries
"${CMAKE_CURRENT_SOURCE_DIR}/TSCLIB.dll"
PARENT_SCOPE
)
ldd_tsclib_bundled_libraries改为: 项目名称_bundled_libraries
配置完编译的时候会把dll自动添加进exe运行文件的同级目录下
配置结束
在Dart中使用
加载dll文件
final DynamicLibrary _tsclib = DynamicLibrary.open("TSCLIB.dll");
调用dll里面的函数
typedef ABOUT_NA = Void Function();//C类型定义
typedef ABOUT = void Function();//dart类型定义
///调用示例,如果about函数存在
void about() {
final fun = _tsclib.lookupFunction<ABOUT_NA, ABOUT>("about");
fun();
}
传参示例,接收字符串类型,String.toNativeUtf8() 是ffi包自带的扩展方法
typedef OPEN_PORT_NA = Void Function(Pointer<ffi.Utf8> str);
typedef OPEN_PORT = void Function(Pointer<ffi.Utf8> str);
///打开打印机
void openport(String printer) {
final fun = _tsclib.lookupFunction<OPEN_PORT_NA, OPEN_PORT>("openport");
fun.call(printer.toNativeUtf8()); // dart 的字符串转成c能识别的Pointer<ffi.Utf8>类型
}