gpt4 book ai didi

c - 用于 C 运行时动态链接的 Matlab Engine API

转载 作者:太空宇宙 更新时间:2023-11-04 04:14:26 24 4
gpt4 key购买 nike

我在 C 应用程序中使用 Matlab 引擎 API,一切正常,但我现在想使用 LoadLibrary() 函数将其从加载时动态链接更改为运行时动态链接。

我可以加载库并获取我需要的函数的地址,但是当我尝试打开引擎时,我遇到了访问冲突:

  • “myProgram.exe 中 0x002fa001 处的未处理异常:0xC0000005:访问冲突读取位置 0x000000fe。”。

这是我的函数的第一部分:

void callMatlabFunction(struct matLabIO *mIO, struct auxdata *aux){
static Engine *ep;
static int firstMatlabCall = 1;
typedef Engine *(*engOpen)(const char*);
static engOpen engOpen_ = NULL;
typedef int (*engEvalString)(Engine*, const char*);
static engEvalString engEvalString_ = NULL;
typedef int (*engPutVariable)(Engine*, const char*, const mxArray*);
static engPutVariable engPutVariable_ = NULL;
typedef mxArray* (*engGetVariable)(Engine*, const char*);
static engGetVariable engGetVariable_ = NULL;
typedef int (*engClose)(Engine*);
static engClose engClose_ = NULL;

if (firstMatlabCall){
HINSTANCE engLib = LoadLibrary("LIB/libeng.dll");
if (engLib){
engOpen_ = (engOpen)GetProcAddress(engLib, "ENGOPEN");
engEvalString_ = (engEvalString)GetProcAddress(engLib,
"ENGEVALSTRING");
engPutVariable_ = (engPutVariable)GetProcAddress(engLib,
"ENGPUTVARIABLE");
engGetVariable_ = (engGetVariable)GetProcAddress(engLib,
"ENGGETVARIABLE");
engClose_ = (engClose)GetProcAddress(engLib, "ENGCLOSE");
/* All of these return valid addresses */
}
else{
printf("The MatLab Engine DLL cannot be located. Make sure it
is located in your LIB folder");
}
if (!(ep = engOpen_(NULL))) {
printf("Can't start MATLAB engine");
/* ERROR OCCURS HERE */
}
firstMatlabCall = 0;
}
/*conversion of variables to mxArrays and call to matlab function*/
}

最佳答案

我发现我使用了错误的函数名称。我不知道有什么区别,但是有一个 ENGOPEN 和一个 engOpen 函数。显然只有小写的才有效。

关于c - 用于 C 运行时动态链接的 Matlab Engine API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53556377/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com