是否可以使Matlab函数句柄与C ++函数指针兼容?我试图从Matlab调用一个C ++函数,它接受一个C ++函数指针。例如:
C ++:
void Cfunction( C++functionPointer);
Matlab的:
function out Mfunction(functionHandle)
out= Cfunction(functionHandle)
不幸的是我无法发布代码,因为它是保密的。所以我希望我的Matlab程序使用calllib()调用C ++函数。 C ++函数的一个参数是函数指针。在Matlab中,我尝试使用Matlab函数句柄作为callib中的参数,但这不起作用。因此,我很难从Matlab调用C ++函数。
Matlab表示C ++编译器不接受其指针参数的Matlab函数句柄类型。
由于
答案 0 :(得分:2)
好的,所以,根据我的理解,你有一个用C ++编写的库,它有一个你需要运行的函数(我称之为functionFromMyCppLibrary
)。该函数需要的一个参数是函数指针。
我假设这个函数指针必须是C ++函数。如果functionFromMyCppLibrary
需要调用任意Matlab函数,那么我的答案不适用。但是,Mathworks交换中有一个Q& A,您可能会觉得有用:How do I pass function handles to C++ mex function in MATLAB 7.8 (R2009a)?。您可能需要修改下面的CppFunction
,以便Matlab调用feval
。如果您可以在CppFunction()
中对Matlab函数名称进行硬编码,那么实际上会更容易。
callTheCppThing.cpp
:
#include "mex.h"
#include "myCppLibrary.h"
void CppFunction()
{
// The function your C++ library requires as a function pointer
// You could use mexCallMATLAB here to call a Matlab function,
// but it will get trickier if you can't hard-code the name of
// the Matlab function here
}
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[])
{
// Process however you need the arguments
functionFromMyCppLibrary(CppFunction);
// Create the output variables and return whatever Matlab needs
}
您可以使用
进行编译mex callTheCppThing.cpp
(在此命令行中添加将此C ++与您的库链接所需的任何内容。)
你从Matlab打来电话
callTheCppThing
这消除了Matlab将任何类型的句柄传递给C ++库的需要。 (如果您不可能在C ++中编写不同的包装器,那么请检查Mathworks中的链接Q& A.这很棘手,但可能。)