【vs c++与matlab混编】dll初始化失败

【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中导出函数的名称。

  • 给你找了一篇非常好的博客,你可以看看是否有帮助,链接:VS与Matlab混合编程——调用matlab.dll实现
  • 除此之外, 这篇博客: matlab导出dll及c++调用matlab初始化异常处理中的 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命令行导出正常,这里暂时没去深究。