【问题标题】:Explicit/implicit loading of a dll from a mex file从 mex 文件显式/隐式加载 dll
【发布时间】:2011-04-04 09:37:50
【问题描述】:

我的问题可能与此重复:matlab mex files and C++ dll (windows),但不完全是。

当我尝试从 Matlab 的 mex 文件(Visual Studio 2008、Windows 7 64 位、Matlab 2010b)中显式加载 dll 时,加载在运行时失败(我得到一个 NULL 句柄)。当不在 mex 文件中使用时,相同的代码可以正常工作。

当我尝试通过链接到 .lib 文件来隐式加载时,我收到关于 dll 中定义的函数的链接器错误 unresolved external symbol。同样,当不在 mex 文件中使用时,相同的代码也可以正常工作。

原因是否与上述 SO 问题的答案相同,还是我遗漏了什么?如果原因相同,除了上述问题中的建议之外,还有其他解决方案吗?

【问题讨论】:

  • 链接的DLL是否在路径中?如果没有,那么系统如何找到它?
  • 对于调试,我使用绝对路径来避免此类问题,正如我所写,相同的代码在没有用于 mex 文件时完全可以正常运行。
  • 嗯,有什么不一样的不是吗?

标签: visual-studio-2008 matlab dll mex loadlibrary


【解决方案1】:

我假设您的代码正在使用 Windows 函数 LoadLibrary。您应该检查来自GetLastError 的返回,以了解 LoadLibrary 调用失败的原因。

【讨论】:

  • 错误是:ERROR_BAD_EXE_FORMAT 193 (0xC1) %1 is not a valid Win32 application. 我认为 dll 编译的是 32 位,而 mex 是 64 位。我会检查并提供更多详细信息。
  • 好的,就是这样。我试图通过 64 位 mex 文件加载 32 位 dll。当使用 x64 配置编译 dll 时,ot 加载正常。谢谢!
猜你喜欢
  • 1970-01-01
  • 2015-12-05
  • 2011-06-15
  • 1970-01-01
  • 2011-07-24
  • 2020-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多