Matlab函数句柄和C ++函数指针

时间:2017-09-28 17:23:35

标签: c++ matlab

是否可以使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函数句柄类型。

由于

1 个答案:

答案 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.这很棘手,但可能。)