如何在 flutter 构建窗口中包含 dll

2024-01-02

我正在开发一个在开发中运行良好的 flutter 项目。 但是我不知道如何让构建包含使用 FFI 引用的 dll。

我找不到关于如何执行此操作的明确说明。

我尝试按照以下步骤构建 msixhere https://flutter.dev/desktop,它有效,但似乎不包含 dll(它以与常规构建相同的方式失败)

让构建过程考虑 dll 的过程是什么?

其他 dll 出现在 3rd 方软件包的构建目录中,所以一定有办法,对吧?


您自己确实很难发现这一点,但实际上您可以将这些库绑定到您的 MSIX。就我而言,我只是使用制造商提供的 Dart FFI 和 DLL 为标签打印机制作了一个包,这就是我的做法。

您需要将这些 DLL 添加到您的assets设置为pubspec.yaml从你的包裹中。这是我的情况:

[...]
flutter:
  [...]
  assets:
    - assets/WinPort.dll
    - assets/Winppla.dll
    - assets/Winpplb.dll
    - assets/Winpplz.dll

通过此设置,您将把 DLL 文件嵌入到最终的 MSIX 中,但这是简单的部分。现在您必须确保在代码中正确加载这些文件。 根据我自己的测试,我仍然处理两种开发和测试代码的方法,第一种是当我通过以下方式在我的机器中运行项目时flutter run我必须设置 current.path 的目标,当我完成它并开始构建部署时,我将其更改为resolvedExecutable.parent.path。哪里是你需要做的事情。 在开发环境中加载 DLL(flutter run):

final String _packageAssetsDirPath = normalize(join(Directory.current.path,'assets'));

在生产环境中(从安装的 .exe 或 MSIX 运行):

final String _assetsPackageDir = normalize(
      join('data', 'flutter_assets', 'packages', 'YOUR_PACKAGE_NAME', 'assets'));
  final String _exeDirPath = File(Platform.resolvedExecutable).parent.path;
  final String _packageAssetsDirPath =
      normalize(join(_exeDirPath, _assetsPackageDir));

在这个 var 调用之后_packageAssetsDirPath加载 DLL 会很容易,现在调用 DynamicLibrary 构造函数:

// Path for DLL file
final String _libDllSourceFullPath =
      normalize(join(_packageAssetsDirPath, 'Winppla.dll'));
// Target for copy, place DLL in same place the .exe you are running
final String _libDllDestFullPath =
      normalize(join(_packageAssetsDirPath, 'YOUROWN.dll'));
// Try to copy for running exe path
File(_libDllSourceFullPath).copySync(_libDllDestFullPath);

// With this copy, would be simple to load, and if it fails, try in full path
// LOAD DLL
  try {
    String _packageAssetsDirPath =
        normalize(join(Directory.current.path, 'assets'));
    String _printerLibraryPath =
        normalize(join(_packageAssetsDirPath, 'Winppla.dll'));

    DynamicLibrary _library = DynamicLibrary.open(_printerLibraryPath);
    return _library;
  } catch (e) {
    try {
      DynamicLibrary _library = DynamicLibrary.open('Winppla.dll');
      return _library;
    } catch (e) {
      // Avoing errors creating a fake DLL, but you could deal with an exception
      return DynamicLibrary.process();

    }
  }

此时您可以加载 DLL 并使用它,您可以在以下位置查看我的包完整代码https://github.com/saviobatista/argox_printer https://github.com/saviobatista/argox_printer检查lib/src/ppla.dart在函数中_setupDll()你会看到加载。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 flutter 构建窗口中包含 dll 的相关文章

  • 颤动中的弯曲导航栏

    目前 我在 flutter 中有一个库https pub dev packages curved navigation bar https pub dev packages curved navigation bar并已经在我的项目中实现了
  • Flutter - 堆栈中的定位小部件导致异常

    当我尝试使用 Positioned 小部件封装 PandemicCard 时 出现以下异常 如果我渲染卡单独 无定位小部件 它就可以正常工作 I flutter 7331 EXCEPTION CAUGHT BY RENDERING LIBR
  • 在 Dart 中查找和替换字符串

    我正在为这个应用程序使用 flutter 但我在应用程序的逻辑方面遇到了问题 任何帮助深表感谢 应用程序目标 通过以下方式将所有输入缩写解码 替换 为单词 用户通过文本框输入文本 应用程序查找任何缩写 几个 并仅用文本替换缩写 我能够使用一
  • 在 dart 中,集合如何确定两个对象相等?

    我不明白集合如何确定两个对象何时相等 更具体一点 什么时候add集合的方法 确实添加了一个新对象 并且什么时候它不作用一个新对象 因为该对象已经在集合中 例如 我有以下类的对象 class Action final Function fun
  • 如何让 pub build 在 dart 聚合物项目上使用源映射

    On a 飞镖聚合物项目 https www dartlang org polymer 当我进行调试时酒吧建设 https www dartlang org tools pub cmd pub build html像这样 pub build
  • 扑。如何检查自动续订订阅是否仍然有效

    我的应用程序有 1 个月的自动续订订阅 当用户单击 购买订阅 按钮时 我将购买日期保存到共享首选项中 然后 1 个月后 我需要检查该订阅是否仍然有效 那么我该如何实施呢 2020 年 3 月 11 日更新 你好 我可以看到那些正在寻找如何在
  • 如何在 Flutter 上创建复制到剪贴板事件?

    目前我想在用户设备上为 复制到剪贴板 创建事件 当用户单击 列表视图前导图标 内容复制 时 文本应存储在他的设备剪贴板上 请问有人可以帮助我吗 Widget buildListItem BuildContext context Docume
  • 如何从 Flutter Web 中的 URL 中删除哈希 (#)

    Flutter Web 项目的默认 URL 定义了包含主题标签的 URL 如下 http localhost 41521 peaple 我想删除这个 如下所示 http localhost 41521 peaple 我怎么解决这个问题 您现
  • 如何设置 dart objectbox 并预填充本地数据库?

    我想用 Flutter 设置一个 ObjectBox 数据库 我想用值预先填充数据库文件 安装应用程序时 数据库文件将被复制并由应用程序使用 我希望能够继续提供架构迁移 是否可以 如何建立这种类型的架构 你有什么例子吗 SOLUTION 通
  • 如何在 flutter 中用动画 POP

    我正在触发 Navigator pop 事件 并且想要淡出到页面的过渡 我尝试过 Fluro 但没有尝试过 我对实施它不感兴趣 这就是我正在做的 Widget build BuildContext context return Scaffo
  • Flutter - 每次应用程序重新启动后保留变量的值

    在我的一页上 我希望我的用户从一个变量上的默认文本开始 codeDialog 然后我希望他们更改该文本 之后他们编写的文本将成为我的新默认文本 遗憾的是我无法让它发挥作用 现在 当我重新启动应用程序并打开该屏幕时 它会重置为null 我认为
  • Dart 包的条件导入/代码

    有没有办法根据 Dart 中的环境标志或目标平台有条件地导入库 代码 我正在尝试在两者之间切换dart io的 ZLibDecoder ZLibEncoder 类和基于目标平台的 zlib js 有一篇文章介绍了如何创建统一的界面 http
  • 有没有办法模拟小部件或屏幕特定位置的触摸?

    我想触摸或点击小部件上的某处 而不让用户在此时明确触摸屏幕 有什么办法可以做到吗 我已经检查了SO答案 有些人建议使用 集成测试 但在未物理或以某种方式连接到笔记本电脑的设备上无法执行 集成测试 无法找到更好的措辞 我还尝试进行 hitTe
  • 滑动时向 PageView 添加新页面

    我目前正在制作一个日历应用程序 我想向右或向左滑动以转到下个月或上个月 我使用 PageView 时首先设置了一个包含 3 个项目的数组 第一个页面是第二个项目 我想向右滑动并在末尾添加一个页面 我想向左滑动并在开头添加一个页面 目前 如果
  • 将 Flutter 前端与适用于 Android 和 iOS 的 .NET Core 后端相结合

    目前在一家使用 NET 不是 Core 的公司工作 但希望切换到 NET Core 并想通过创建一个具有 Flutter io 前端和 NET Core 后端的应用程序来实现这一目标 带后端的应用程序只是为了了解 NET Core 的功能
  • flutter stepper 小部件 - 验证各个步骤中的字段

    我正在使用步进器小部件来收集用户信息并对其进行验证 我需要在每个步骤调用 API 因此在每个继续按钮的步骤中验证每个字段 我正在使用表单状态和表单小部件 但是问题是它验证步进器中所有步骤中的整个字段 我如何仅验证步进器中的单个步骤 我浏览了
  • flutter - SliverList / SliverChildBuilderDelegate 提供初始索引或允许负索引

    我目前正在 Flutter 中使用 SliverList 和 SliverChildBuilderDelegate 构建日历视图 这样我就不必一次渲染日历中的每个项目 第一个日期是纪元时间 即 1970 年 1 月 1 日 最后一个日期是在
  • DART:将来 then 的语法

    我不明白的语法then clause 1 myFuture 6 then erg gt print erg What s erg gt expr语法上 我以为这会是一个函数 但是 then callHandler2 erg 不起作用 错误
  • 如何取消配置 flutterfire?

    我们在 CLI 中使用以下命令将 flutter 应用程序与 firebase 连接 flutterfire configure 如文档中所述 https firebase flutter dev docs overview https f
  • 如何在 Flutter 中对 RaisingButton 的颜色进行动画处理?

    我有一个RaisedButton 我想要animate它的颜色来自green to red 反之亦然 每次用户单击它时 这怎么能做到呢 您可以使用AnimatedContainer https api flutter dev flutter

随机推荐