Проблема с DLL, которые зависят от других DLL - PullRequest
0 голосов
/ 14 января 2020

Я создал GUI в C# как gui .dll и создал C ++ / CLI interop interop.dll для проекта C ++. Это означает (вызов * .exe -> вызов interop.dll и вызов interop.dll -> gui .dll). Я тестирую его с консольным приложением C ++, которое работает без каких-либо проблем, потому что в конце концов consoleApp.exe и все DLL находятся в той же папке.

То, что я сделал:

  • взаимодействие - это код c ++ / cli со ссылкой на C# dll. Я создал класс и экспортировал его для использования внутри plugin.vst3. C# dll динамически связан
  • внутри проекта plugin.vst3. Я включил библиотеку для проекта взаимодействия, чтобы использовать класс и добавить interop.lib в Linker. interop.dll динамически связан

Что я хочу: Теперь я хочу использовать эти dll (gui .dll и interop.dll) внутри проекта c ++ как еще одну "dll" myPlugin.vst3 (аудио плагин). Для тех, кто не знает, аудио плагины расположены в другом месте, как программа, которая их использует. Это означает, что, если плагин загрузки аудиопрограммы, это другой сценарий, как мой DLL-файл consoleApp.exe в том же месте.

Проблема: Когда я запускаю хост-программу, которая загружает мой vst3, к сожалению, VST3 начать поиск моих DLL из представления AudioHost.exe не из представления VST3, где находится мой файл VST3.

Например, если 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.


Вопросы:

Простой вопрос: «Как загрузить эти dll из vst3», как я описал это в «Что я хочу» и «Проблема»?

Что пришло в голову, так как сначала был плагин загрузки с кодом (например, LoadLibrary ( ...)) вместо этого используйте * .lib. Но все примеры и решения, для dll, которые экспортируют только C функции, а не как мой сценарий, где я использую класс. Может ли dll загружаться из кода и использовать класс?

Другая идея заключалась в перенаправлении DLL с файлом манифеста, но документации для этого сценария нет, или я не могу ее найти. И я не уверен, будет ли это работать.

...