zoukankan      html  css  js  c++  java
  • [Flutter] FFI之生成Ansi字符串指针

    场景

    在 Flutter 中调用某个 dll 文件的函数A。其中参数 fileName 使用的是 ansi 字符串指针。

    我们知道,Flutter 中的 String 实际上 utf-16, 现有的 String 转字符串指针的方法有 toNativeUtf8toNativeUtf16

    解决办法

    第一步: 引入第三方包 fast_gbk, 它提供了转码的实现。

    第二步: 增加一个 StringPointer 辅助函数

    /// Extension method for converting a [String] to a `Pointer<Utf8>`.
    extension StringPointer on String {
      /// 原始字符串指针,不作任何转码
      Pointer<ffi.Utf8> toNativeRaw({Allocator allocator = ffi.malloc}) {
        final units = this.codeUnits;
        final Pointer<Uint8> result = allocator<Uint8>(units.length + 1);
        final Uint8List nativeString = result.asTypedList(units.length + 1);
        nativeString.setAll(0, units);
        nativeString[units.length] = 0;
        return result.cast();
      }
    }
    

    第三步:

    import 'dart:ffi';
    import 'package:fast_gbk/fast_gbk.dart';
    import 'package:ffi/ffi.dart' as ffi;
    ...
    
    final fileName = 'C:	est中文abc.txt';
    final text = GbkEncoder().convert(fileName ).skip(0);
    
    final Pointer<ffi.Utf8> strPtr = text.toNativeRaw();
    try {
      // 调用目标,文件名参数使用 strPtr
      ...
    } finally {
      ffi.malloc.free(strPtr);
    }
    

    END

  • 相关阅读:
    Magento交易邮件常见问题
    Magento谷歌分析设置
    magento SEO优化设置
    飞凤平台示范项目
    工厂生产线测量仪器的数据下发
    某外资汽车部件工厂车床联网系统
    行云仓库管理系统的概述
    arm v5,v6,v7?
    前端开发收藏夹
    mysql 事件
  • 原文地址:https://www.cnblogs.com/yangyxd/p/15495215.html
Copyright © 2011-2022 走看看