2016-01-13 3 views
0

Я пытаюсь использовать sdk с движением Leap с плагином JUCE vst под Windows 10 x64.Как использовать внешнюю dll при создании vst под окнами

У меня есть мой проект exactly like this, и убедитесь, что Leap.dll был в моем выходном каталоге VstPlugins. Однако мой DAW (Reaper) не может обнаружить/открыть DLL моего плагина. Я также попытался поместить свой x86 Leap.dll в C: \ Windows \ System32 (и мою версию x64 в C: \ Windows \ SysWOW64) и попытался их regsvr32, только чтобы сообщить the DLLRegistryServer entry point cannot be found.

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

+0

*** и попытался regsvr32 их *** Почему ты это сделал? В инструкциях я вообще не вижу regsvr32. Скопировали ли вы DLL-файлы в том же месте, что и исполняемые приложения, например, часть xcopy из примера? – drescherjm

+0

yes Я скопировал dll Leap в той же папке, что и моя плагин dll - мой вывод - dll, а не .exe. И я попробовал метод regsvr32 (с dll в системных папках), потому что это работало в прошлом, когда я использовал другие dll. И потому, что я не знал, что еще делать! –

+0

Вы построили dll для SDK (я не мог скачать, чтобы смотреть без регистрации)? Я спрашиваю, потому что если вы загрузили двоичный выпуск и у вас нет правильных версий dll (установленных в вашей системе), dll не будет загружаться, даже если у вас есть это в правильной папке. – drescherjm

ответ

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. Во всяком случае, вам нужно знать формат объявления функции и создать указатель на это. Представьте себе, что это функция, которая принимает символ * в качестве входных данных и возвращает INT в качестве вывода, то вам необходимо иметь линию, как это на верхней части .cpp или .c код:

typedef int (*FUNCTIONTEMPLATE) (char *); 
Смежные вопросы