0

我正在尝试从 dart 中的 c++ 函数获取返回值。

我的 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();

然后我调用了isAliveFuncfrom dart,我想要那个函数的结果。我尝试了所有这些方法。这些都不起作用。

Pointer<Int8> casted = isAliveFunc()!.cast();
Pointer<Int8>? fromPointer = isAliveFunc()!;

developer.log('value : $casted');

我得到这样的结果 Pointer<Int8>: address=0x1

如何从 dart 中的此指针中获取值?我希望得到 1 或 0 作为结果。

4

1 回答 1

0

出于某种原因,您从未真正调用过您的isAliveFunc函数。

只需像调用其他函数一样调用该函数:

Pointer<Int8> casted = isAliveFunc();

或者

Pointer<Int8> casted = isAliveFunc.call();

您还应该注意您的 Dart 静态分析警告和错误。


您的函数定义也不正确。is_alive返回bool/ Int8,而不是指针。

你的BooleanFunctiontypedef 应该是:

typedef BooleanFunction = Int8 Function();

int Function() isAliveFunc = isAlive.asFunction();

并且函数调用返回应该分配给int

int casted = isAliveFunc();
于 2021-07-09T22:22:23.140 回答