本机扩展-C++;本地图书馆 Spple扩展与C库链接工作正常,但C++库? 我有一个基于类的C++库,我想用作一个本地扩展,所以我们有: 类连接{ 开放(…); .... } 在C++和I中,希望在DART中有一个类似的类。

本机扩展-C++;本地图书馆 Spple扩展与C库链接工作正常,但C++库? 我有一个基于类的C++库,我想用作一个本地扩展,所以我们有: 类连接{ 开放(…); .... } 在C++和I中,希望在DART中有一个类似的类。,dart,dart-native-extension,Dart,Dart Native Extension,查看DaTr.Apdio.h和DrttnnTiVel.API API。我不清楚如何将C++指针传递到C++中,以及如何调用它们上的方法,并将其绑定到DART类实例。ResolveName是如何处理connection->open()类型调用的,还是我们完全不同地执行此操作。可以获得问题答案的基本项目: cpp_extension.cc #包括 #包括 #包括 #ifdef_WIN32 #包括“windows.h” #否则 #包括 #包括 #包括 #包括 #恩迪夫 #包括“dart_api.h”

查看DaTr.Apdio.h和DrttnnTiVel.API API。我不清楚如何将C++指针传递到C++中,以及如何调用它们上的方法,并将其绑定到DART类实例。ResolveName是如何处理connection->open()类型调用的,还是我们完全不同地执行此操作。

可以获得问题答案的基本项目:

cpp_extension.cc

#包括
#包括
#包括
#ifdef_WIN32
#包括“windows.h”
#否则
#包括
#包括
#包括
#包括
#恩迪夫
#包括“dart_api.h”
Dart_NativeFunction ResolveName(Dart_句柄名称、int argc、bool*自动设置范围);
DART\ U导出DART\ U句柄cpp\ U扩展\ U初始化(DART\ U句柄父\ U库){
if(Dart_IsError(parent_library)){return parent_library;}
Dart_Handle result_code=Dart_SetNativeResolver(父库,解析名称);
if(Dart_IsError(result_code))返回result_code;
返回Dart_Null();
}
省道手柄错误(省道手柄){
如果(省道错误(手柄))省道错误(手柄);
返回手柄;
}
类连接{
int*缓冲区;
布尔开了门;
公众:
连接(){
开放=假;
缓冲区=新整数[1000000];
memset(缓冲区,110000);
}
无效关闭(){
开放=假;
} 
无效打开(常量字符*连接字符串){
开放=真;
}
~Connection(){
删除缓冲区;
}
};
无效连接关闭(Dart_NativeArguments参数){
连接*连接;
飞镖柄;
Dart_肠镜();
dh_handle=Dart_GetNativeArgument(参数,0);
连接=(连接*)dh_句柄;
连接->关闭();
Dart_句柄结果=Dart_Null();
Dart_SetReturnValue(参数、结果);
Dart_ExitScope();
}
void ConnectionCreate(Dart_NativeArguments参数){
连接*连接;
省道处理结果;
Dart_肠镜();
连接=新连接();
结果=Dart_NewInteger((int64_t)连接);
Dart_SetReturnValue(参数、结果);
Dart_ExitScope();
}
void ConnectionPeerFinalizer(Dart_WeakPersistentHandle,void*peer){
删除(连接*)对等点;
}
无效连接对等注册表(Dart_NativeArguments参数){
int64\t对等机;
Dart_手柄dh_对象;
Dart_Handle dh_peer;
Dart_肠镜();
dh_object=Dart_GetNativeArgument(参数,0);
dh_peer=Dart_GetNativeArgument(参数,1);
Dart_整数点64(dh_对等点和对等点);
Dart_NewWeakPersistentHandle(dh_对象,(void*)对等,ConnectionPeerFinalizer);
Dart_SetReturnValue(参数,Dart_Null());
Dart_ExitScope();
}
无效连接打开(Dart_NativeArguments参数){
连接*连接;
常量字符*连接字符串;
Dart_手柄dh_连接管柱;
飞镖柄;
Dart_肠镜();
dh_handle=Dart_GetNativeArgument(参数,0);
dh_connectionString=Dart_GetNativeArgument(参数,1);
Dart_字符串到字符串(dh_连接字符串和连接字符串);
连接=(连接*)dh_句柄;
连接->打开(连接字符串);
Dart_句柄结果=Dart_Null();
Dart_SetReturnValue(参数、结果);
Dart_ExitScope();
}
结构函数查找{
常量字符*名称;
省道功能;
};
函数查找函数列表[]={
{“ConnectionClose”,ConnectionClose},
{“ConnectionCreate”,ConnectionCreate},
{“连接开放”,连接开放},
{“ConnectionPeerRegister”,ConnectionPeerRegister},
{NULL,NULL};
Dart_NativeFunction ResolveName(Dart_句柄名称、int argc、bool*自动设置范围){
如果(!Dart_IsString(name))返回NULL;
Dart_NativeFunction结果=空;
Dart_肠镜();
const char*cname;
HandleError(Dart_StringToCString(名称和cname));
对于(int i=0;函数列表[i]。名称!=NULL;++i){
if(strcmp(函数列表[i].name,cname)==0){
结果=函数\列表[i]。函数;
打破
}
}
Dart_ExitScope();
返回结果;
}
cpp\u扩展。dart

库dart_和_cpp_classes.ext_cpp_扩展;
导入“dart ext:cpp_扩展”;
类连接{
最终字符串连接字符串;
内把手;
bool _opened=false;
连接(this.connectionString){
_句柄=_create();
_peerRegister(这个,_handle);
}
bool get open=>\u opened;
无效关闭(){
_关闭(_手柄);
_开放=假;
}
空开(){
_打开(_手柄,连接管柱);
_开放=真;
}
int_create()本机“ConnectionCreate”;
void\u close(int句柄)本机“ConnectionClose”;
void _open(int句柄,String connectionString)本机“ConnectionOpen”;
void_peerRegister(Object Object,int handle)本机“ConnectionPeerRegister”;
}
使用扩展名.dart

import'包:dart_和_cpp_类/cpp_扩展名.dart';
void main(){
var计数=500;
var连接=[];
对于(变量i=0;i
以下是github上的基本(即用)软件包:

此包中的其他必需文件

运行:

  • bin/build\u cpp\u extension.dart
  • bin/use_cpp_extension.dart
附言

<>我不是C++程序员。< /P>
请原谅我在这门语言中的任何不准确之处。

好的,稍微挖掘一下,我现在已经使用了这个,我在Dart中这样做:-

bool open() native 'Connection::open';
在我的解析器中,查找字符串“Connection::open”,然后调用本机函数。 因此,这意味着我的本机函数名为“connectionOpen”和“messageOpen”等,因此我可以解决这些问题。

是的,我知道这一点,我希望