Как использовать внешнюю dll при сборке vst под windows

Я пытаюсь использовать SDK Leap motion с плагином JUCE vst под Windows 10 x64.

Я настроил свой проект именно так и убедился, что Leap .dll был в моем выводе, каталог VstPlugins. Однако моя DAW (Reaper) не может обнаружить/открыть dll моего плагина. Я также пытался поместить свою x86 Leap.dll в C:\Windows\System32 (и мою версию x64 в C:\Windows\SysWOW64) и пытался их regsvr32, но мне сказали не удается найти точку входа DLLRegistryServer.

Когда я комментирую все, что связано с Leap sdk, мой плагин обнаруживается в Reaper, и все остальное работает, а в Mac OSX я также могу использовать Leap, так что, похоже, моя проблема в том, что моя система Windows его не знает. должен использовать Leap.dll с dll моего плагина. Как это сделать?


person Vincent Berthiaume    schedule 13.01.2016    source источник
comment
и попытался зарегистрировать их regsvr32 Почему вы это сделали? Я вообще не вижу regsvr32 в инструкции. Вы скопировали dll в то же место, что и исполняемый файл вашего приложения, как часть xcopy из примера?   -  person drescherjm    schedule 13.01.2016
comment
да, я скопировал dll Leap в ту же папку, что и dll моего плагина - мой вывод - dll, а не .exe. И я попробовал метод regsvr32 (с dll в системных папках), потому что в прошлом это работало для меня, чтобы использовать другие dll. И потому что я не знал, что еще делать!   -  person Vincent Berthiaume    schedule 13.01.2016
comment
Вы собирали dll для SDK (у меня не получилось скачать посмотреть без регистрации)? Я спрашиваю, потому что, если вы загрузили двоичный выпуск и у вас нет правильных зависимостей dll (установленных в вашей системе), dll не загрузится, даже если она у вас есть в правильной папке.   -  person drescherjm    schedule 13.01.2016
comment
Ваш вывод довольно обратный, он перестает работать, когда действительно имеет зависимость от Leap. Вероятно, отсутствующая DLL, используйте Process Monitor SysInternals, чтобы увидеть, как ваша DAW ищет ее и не находит.   -  person Hans Passant    schedule 13.01.2016
comment
@drescherjm, я полагаю, вы имеете в виду Leap SDK? Они не дают исходный код, только dll. И никакой статической библиотеки. И в их инструкциях четко сказано, что нам нужна только Leap.dll. И использование Leap.dylib работает на Mac.   -  person Vincent Berthiaume    schedule 13.01.2016
comment
да. Возможно, вам нужно использовать dependencywalker dependencywalker.com, чтобы убедиться, что у вас есть все зависимые DLL. Кроме того, если для каждой версии Visual Studio существуют разные двоичные файлы (чтобы избежать несовместимости с CRT), убедитесь, что вы используете правильную версию.   -  person drescherjm    schedule 13.01.2016


Ответы (1)


Если это динамическая библиотека, вам не нужно включать ее в свой проект. Все, что вам нужно, это скопировать файл на компьютер пользователя в определенную папку, а затем в коде вашего плагина добавить что-то вроде этого:

DynamicLibrary dynLib;
bool loaded = dynLib.open("DYNAMIC_LIBRARY_FULL_PATH");
if(loaded)
{
    FUNCTIONTEMPLATE functiontemplate = (FUNCTIONTEMPLATE) dynLib.getFunction("functionName");
    char *input;
    int output = functiontemplate (input);
}

Конечно, если вы не писали динамическую библиотеку сами, то вам нужно что-то вроде обходчика зависимостей, чтобы проверить внутри dll и найти объявление функции или прочитать документацию от того, кто написал dll. В любом случае, вам нужно знать точный формат объявления функции и создать указатель на него. Представьте, что это функция, которая принимает char* в качестве входных данных и возвращает int в качестве выходных данных, тогда вам нужно иметь такую ​​​​строку поверх вашего кода .cpp или .c:

typedef int (*FUNCTIONTEMPLATE) (char *);
person Ehsan Enayati    schedule 15.03.2016