0

我正在开发一个 MATLAB 引擎应用程序。为了使其工作,需要将 MATLAB 添加到 PATH 环境变量中,以便引擎应用程序可以找到某些 DLL(libeng 和 libmx)。

当 MATLAB 注册为 COM 服务器时,它会将其位置写入注册表,我可以访问它。使用此信息,是否有一种简单的方法可以让引擎应用程序工作而无需将 MATLAB 添加到 PATH?引擎应用程序理论上可以从注册表中读取这些 DLL 的位置,但问题是它甚至无法在没有这些 DLL 的情况下启动(根据 MA​​TLAB 引擎编译指令以标准方式编译时)。

我对winapi不是很熟悉,对COM一点也不熟悉。

是否有一个简单的解决方案可以让问题根据注册表中的信息找到它的 DLL?

4

1 回答 1

2

我找到了以下解决方案:

如果我们使用延迟 DLL 加载,那么我们就有机会在程序尝试加载 DLL 之前设置 DLL 搜索路径。

为此,需要将以下内容添加到链接器选项中: /DELAYLOAD:libmx.dll /DELAYLOAD:libeng.dll并且有必要链接到delayimp.lib. 完成此操作后,我们可以添加对SetDllDirectory()的调用,并将 libmx.dll 和 libeng.dll 所在位置的路径添加到 main/WinMain 函数的开头。

于 2013-04-08T15:32:36.993 回答