我有一个Mex函数,可以将特定的消息和消息类型(1,2,3)从C转发到Matlab函数'fruit_getpar.m'。这个Matlab函数'fruit_getpar.m'从消息字符串中提取参数并将其存储为变量。 C消息是在随机实例中生成的。问题:Matlab有时会在生成的C消息中崩溃,但是这条消息的结构总是一样的。
任何线索?
#include "mex.h"
#include "fruit_matlab.h"
#include "string.h"
// Callback function
void fruit_mexCallback(char *message, double message_type){
mxArray *lhs[2];
char sType[5];
if (message == NULL || message_type <= 0)
return;
if (strstr(message, "apple") == NULL && strstr(message, "banana") == NULL && strstr(message, "orange") == NULL) {
itoa((int)message_type, sType, 10);
lhs[0] = mxCreateString(message);
lhs[1] = mxCreateString(sType);
mexCallMATLAB(0, NULL, 2, lhs, "fruit_getpar");
mxDestroyArray(lhs[0]);
mxDestroyArray(lhs[1]);
}
return;
}
// MEX Gateway
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]){
//pointer to callback function
void (*cbPtr)() = NULL;
cbPtr = fruit_mexCallback;
Register_Callback(cbPtr);
}
答案 0 :(得分:1)
在
void (*cbPtr)() = NULL;
cbPtr = fruit_mexCallback;
Register_Callback(cbPtr);
fruit_mexCallback类型不是void(*)()
它是void(*)(char *message, double message_type)
所以当它被称为void(*)()
时,参数可以有任何值且无法使用