首页 > 编程语言 >flutter中调用C++的库

flutter中调用C++的库

时间:2024-12-07 19:43:21浏览次数:3  
标签:调用 handle C++ debugPrint ffi import Pointer flutter

Dart调用C++的库

  1. 安装ffi库 flutter pub add ffi
  2. 如果是C++必须使用C的方式导出接口
import 'dart:ffi';
import 'dart:io';
import "package:ffi/ffi.dart";

final DynamicLibrary ff = Platform.isWindows
    ? DynamicLibrary.open("live666.dll")
    : throw UnsupportedError("only Windows is supported");

// 定义 C 函数的签名
typedef CLive666Init = Pointer<Void> Function(Pointer<Utf8>, Pointer<Utf8>);

// 定义 Dart 函数的签名
typedef DartLive666Init = Pointer<Void> Function(Pointer<Utf8>, Pointer<Utf8>);

// 查找并绑定函数
final live666Init = ff.lookupFunction<CLive666Init, DartLive666Init>('live666_init');
  1. 调用
  void _invokeCpp(){
    try{
      debugPrint("Current working directory: ${Directory.current.path}");

      final handle = live666Init(url, reg);
      if (handle.address == 0) {
        debugPrint("Initialization failed, null pointer returned.");
      } else {
        debugPrint("Initialization succeeded, handle: 0x${handle.address.toRadixString(16)}");
      }
    } on UnsupportedError{
      debugPrint("没有找到动态库");
    }
    malloc.free(url);
    malloc.free(reg);
  }

标签:调用,handle,C++,debugPrint,ffi,import,Pointer,flutter
From: https://www.cnblogs.com/yangwenli/p/18592584

相关文章

  • C/C++内存管理
    1. C/C++内存分布我们先来看下面的一段代码和相关问题constinta(此时an存放在栈上)charchar2[]="abcd"(此时是在栈上创建5个char类型大小的数组,并让用常量字符串来初始化数组内的内容,*char2就是数组第一个元素'a')costchar*pchar3="abcd"(此时const修饰是的char*,所......
  • c++实现Json库
    是的,在很久以前就开始想做这个东西,但是鸽了很久..终于又重新开始学了:pPart1tasktutorial里介绍了断言、怎么写宏、简单用cmake编译环境、常用的测试方法(TDD测试、单元测试)等。任务是:1.修正关于`LEPT_PARSE_ROOT_NOT_SINGULAR`的单元测试,若json在一个值之后,空白之后......
  • 【C++】程序流程控制(中)
    4.1.3switch语句作用:执行多条件分支语句语法:switch(表达式){case  结果1:执行语句;break;case 结果2:执行语句;break;case结果3:执行语句;break;...default:执行语句;break;}示例:代码:#include<iostream>usingnamespacestd;intmain(){   //给电影评......
  • 【C++】continue语句、goto语句
    1、continue 语句作用:在循环语句中,跳过本次循环中余下尚未执行的语句。继续下一次循环。注意:continue只能用于循环中。示例:代码://continue的用法#include<iostream>usingnamespacestd;intmain(){   //如果是奇数,则输出,否则不输出   for(inti=1......
  • 主函数中要求输入一个一元二次方程的三个系数,调用函数判断该方程是否有实数解,如果有实
    #include<iostream>#include<cmath>//用于计算平方根//判断一元二次方程是否有实数解的函数boolhasRealSolutions(floata,floatb,floatc){floatdiscriminant=b*b-4*a*c;returndiscriminant>=0;}//求一元二次方程的解的函数voids......
  • 解决.NET中调用第三方HTTP API时的超时与断开问题
    在.NET中调用第三方HTTPAPI时,可能会遇到超时和断开连接等问题,这些问题可能是由于网络延迟、第三方服务响应慢、服务器负载高等原因引起的。解决这些问题通常涉及以下几个方面:调整HTTP请求的超时设置、增强异常处理、使用重试机制、优化请求的资源管理等。以下是一些常见的解......
  • 【C++ DFS 图论】1519. 子树中标签相同的节点数|1808
    本文涉及知识点C++DFSC++图论LeetCode1519.子树中标签相同的节点数给你一棵树(即,一个连通的无环无向图),这棵树由编号从0到n-1的n个节点组成,且恰好有n-1条edges。树的根节点为节点0,树上的每一个节点都有一个标签,也就是字符串labels中的一个小写字符(编号......
  • 城市攻防战(C++#)
    #include<bits/stdc++.h>#include<windows.h>#include<stdio.h>#include<conio.h>#include<time.h>usingnamespacestd;typedefBOOL(WINAPI*PROCSETCONSOLEFONT)(HANDLE,DWORD);PROCSETCONSOLEFONTSetConsoleFont;POINTWindowpo......
  • PTA DS 7-4 航空公司VIP客户查询 (unordered_map) (C++)(全网最新)
    7-4航空公司VIP客户查询分数25全屏浏览切换布局作者 DS课程组单位 浙江大学不少航空公司都会提供优惠的会员服务,当某顾客飞行里程累积达到一定数量后,可以使用里程积分直接兑换奖励机票或奖励升舱等服务。现给定某航空公司全体会员的飞行记录,要求实现根据身份证号码快......
  • 蓝桥杯 2024 省赛 C++ B组 R 格式 (JAVA面向对象 高精度 纯api题解)
    解题思路:由于数位较大这里采用高精度,又因为高精度写起来比较麻烦所以这里直接采用JAVAapi中的高精度浮点数类型和高精度整数类型,应为高精度浮点数类型四舍五入较为麻烦所以这里改为手动四舍五入importjava.math.BigDecimal;importjava.math.BigInteger;importjava.util......