【发布时间】:2012-01-05 11:40:23
【问题描述】:
我有一个本机库,其中包含一些本机 ntype,并希望在其中 p/调用一些函数。
我能够编组:
foo1(ntype** p) ==> foo1(IntPtr[] p)
但不知道该怎么做:
foo1(ntype*[] p) ==> foo1(<???> p)
至少IntPtr[] 不起作用。
编辑
我试图编组的非托管函数是:
extern mxArray* mclCreateSimpleFunctionHandle(mxFunctionPtr fcn);
mxFunctionPtr 在哪里:
typedef void(*mxFunctionPtr)(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[]);
这表示对以下 matlab 函数签名的调用:
function [varargout] = callback(varargins)
%[
%% Do callback code %%
%]
显然,按照我的预期,这个函数指针应该为我提供 2 个mxArray* 列表:
- 输入参数列表(即 prhs,在 matlab 端初始化)
- 输出参数列表(即 plhs,全部初始化为零,但我应该写入其中)
目前从我所做的测试来看,它只返回plhs 和prhs 列表中的第一个mxArray*
【问题讨论】:
-
接受指针和数组的 C 函数是完全模棱两可的。 ntype** 和 ntype*[] 之间没有区别,除非您在代码中以某种方式赋予它不同的语义。