依赖于另一个DLL的DLL问题

时间:2020-01-14 01:48:39

标签: c++ visual-studio dll dynamic-linking

我在C#中将GUI创建为gui.dll,并为C ++项目创建了C ++ / CLI interop interop.dll。这意味着(* .exe调用-> interop.dll和interop.dll调用-> gui.dll)我使用C ++控制台应用程序对其进行了测试,该应用程序不会出现任何问题,因为最终console.App.exe和所有dll都是在同一文件夹中。

我做了什么:

  • interop是参考C#dll的c ++ / cli代码。我创建了类,并将其导出以在plugin.vst3中使用。 C#dll是动态链接的
  • 在plugin.vst3项目内部,我包括一个供interop项目使用的库,以使用类并将interop.lib添加到链接器。 interop.dll是动态链接的

我想要的东西: 现在,我想在c ++项目中使用那些dll(gui.dll和interop.dll)作为另一个“ dll” myPlugin.vst3(音频插件)。对于那些不知道的人,音频插件与使用它的程序位于不同的位置。这意味着,如果是音频程序加载插件,则与我的consoleApp.exe在同一位置调用dll的情况不同。

问题: 当我运行加载我的vst3的宿主程序时,不幸的是vst3开始从AudioHost.exe视图而不是从vst3视图中搜索我的vst3文件所在的dll。

例如,如果myPlugin.vst3位于D:\ VstiPlugins \ MyTest \内,则interop.dll位于D:\ VstiPlugins \ interop.dll和gui.dll的C:\ ProgramFiles \ Reaper \ Reaper.exe旁边,我的插件已加载。所有文件myPlugin.vst3,interop.dll和gui.dll必须位于同一位置D:\ VstiPlugins \ MyTest。


问题:

一个简单的问题是“如何从vst3加载这些dll”,正如我在“我想要的”和“问题”中描述的那样?

首先想到的是带有代码的加载插件(例如LoadLibrary(...)),而不是使用* .lib。但是所有示例和解决方案都是针对仅导出C函数的dll,而不是作为我使用类的方案。可以从代码中加载dll并使用类吗?

另一个想法是使用清单文件进行DLL重定向,但是没有有关该场景的文档,或者我找不到它。而且我不确定它是否会工作。

0 个答案:

没有答案