【vs c++与matlab混编】dll初始化失败
vs调用matlab,打包之后新文件夹下已经包含了.h、.lib、.dll、.ctf文件,运行.exe文件提示dll初始化失败,但是在原工程文件夹下可以正常使用,请问这要怎么解决?
vs:2019
matlab:R2019b
可能是因为你的dll文件没有正确地被加载。解决方法如下:
确认你的dll文件已经被正确地打包到了exe文件中。
将dll文件复制到exe文件所在的目录。
在你的vs工程中,将dll文件的路径设置为相对路径,例如:将"path/to/dll"替换为"./path/to/dll"。
在你的vs工程中,添加以下代码以加载dll文件:
c++
HMODULE dllHandle = LoadLibrary("path/to/dll");
if (dllHandle == NULL) {
// 处理加载失败的情况
}
使用GetProcAddress()函数获取dll中的函数指针并调用它们。
c++
typedef int (*myFunction)(int);
myFunction func = (myFunction)GetProcAddress(dllHandle, "myFunctionName");
if (func == NULL) {
// 处理获取函数指针失败的情况
}
int result = func(42);
注意:在使用GetProcAddress()函数获取函数指针时,函数名需要使用dll中导出函数的名称。可以使用dumpbin工具来查看dll中导出函数的名称。
1. deploytool工具导出dll
在matlab命令行输入deploytool,选择Library Complier。在窗口选择C++ Shared Library, Add exported functions中选择对应的*.m,然后点击右侧Package即可
2. 命令行mcc导出dll
mex - setup
mbuild - setup
mcc - W cpplib : mydllAdd - T link : lib *.m
ps: 这两种方式,方法1deploytool导出后.h中没有我定义的方法,使用方法2命令行导出正常,这里暂时没去深究。