如何从 dart 中的函数指针访问结果
How to acess the result from a function pointer in dart
我正在尝试从 dart 中的 c++ 函数中获取 return 值。
我的c++代码是这样的
static bool is_alive() {
return true;
}
从 dart 中,我用这个本机代码加载了共享库,我正在尝试调用那个 is_alive()
函数。
typedef BooleanFunction = Pointer<Int8> Function();
Pointer<NativeFunction<BooleanFunction>> isAlive = (functionAddress).cast<NativeFunction<BooleanFunction>>();
Pointer<Int8> Function() isAliveFunc = isAlive.asFunction();
然后我从 dart 调用了 isAliveFunc
,我想要该函数的结果。我尝试了所有这些方法。 None 这些作品。
Pointer<Int8> casted = isAliveFunc()!.cast();
Pointer<Int8>? fromPointer = isAliveFunc()!;
developer.log('value : $casted');
我得到这样的结果 Pointer<Int8>: address=0x1
如何从 dart 中的这个指针获取值?我希望得到 1 或 0 作为结果。
出于某种原因,您实际上从未 调用 您的 isAliveFunc
函数。
只需像调用任何其他函数一样调用该函数:
Pointer<Int8> casted = isAliveFunc();
或
Pointer<Int8> casted = isAliveFunc.call();
您还应该注意 Dart 静态分析警告和错误。
您的函数定义也不正确。 is_alive
return是一个 bool
/Int8
,不是指针。
您的 BooleanFunction
typedef 应该是:
typedef BooleanFunction = Int8 Function();
int Function() isAliveFunc = isAlive.asFunction();
并且函数调用 return 应该分配给一个 int
:
int casted = isAliveFunc();
我正在尝试从 dart 中的 c++ 函数中获取 return 值。
我的c++代码是这样的
static bool is_alive() {
return true;
}
从 dart 中,我用这个本机代码加载了共享库,我正在尝试调用那个 is_alive()
函数。
typedef BooleanFunction = Pointer<Int8> Function();
Pointer<NativeFunction<BooleanFunction>> isAlive = (functionAddress).cast<NativeFunction<BooleanFunction>>();
Pointer<Int8> Function() isAliveFunc = isAlive.asFunction();
然后我从 dart 调用了 isAliveFunc
,我想要该函数的结果。我尝试了所有这些方法。 None 这些作品。
Pointer<Int8> casted = isAliveFunc()!.cast();
Pointer<Int8>? fromPointer = isAliveFunc()!;
developer.log('value : $casted');
我得到这样的结果 Pointer<Int8>: address=0x1
如何从 dart 中的这个指针获取值?我希望得到 1 或 0 作为结果。
出于某种原因,您实际上从未 调用 您的 isAliveFunc
函数。
只需像调用任何其他函数一样调用该函数:
Pointer<Int8> casted = isAliveFunc();
或
Pointer<Int8> casted = isAliveFunc.call();
您还应该注意 Dart 静态分析警告和错误。
您的函数定义也不正确。 is_alive
return是一个 bool
/Int8
,不是指针。
您的 BooleanFunction
typedef 应该是:
typedef BooleanFunction = Int8 Function();
int Function() isAliveFunc = isAlive.asFunction();
并且函数调用 return 应该分配给一个 int
:
int casted = isAliveFunc();