2016-01-13 74 views
0

我試圖用大躍進運動SDK與在Windows 10的x64一個JUCE VST插件下一個VST時使用外部DLL。如何建築物窗戶

我已經安裝我的項目exactly like this,並確信Leap.dll是我的輸出,VstPlugins目錄。然而,我的DAW(收割者)無法檢測/打開我的插件的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系統不知道它必須與我的插件的DLL一起使用Leap.dll。人們如何去做這件事?

+0

***,並試圖REGSVR32他們*** 你爲什麼這麼做?在說明中我完全沒有看到regsvr32。你是否將dll複製到與應用程序可執行文件相同的位置,如示例中的xcopy部分? – drescherjm

+0

是的,我沒有將我的插件dll中的Leap dll複製到同一個文件夾中 - 我的輸出是一個dll,而不是一個.exe。我嘗試了regsvr32技術(在系統文件夾中使用dll),因爲這在過去對我來說可以使用其他dll。而且因爲我不知道還有什麼可做的! –

+0

您是否爲SDK構建了dll(我無法下載查看而無需註冊)?我問,因爲如果你下載了一個二進制版本,並且你沒有正確的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); 
} 

當然,如果你不是你自己寫的動態庫,那麼你需要像依賴walker來檢查DLL裏面,並找到函數聲明或從誰寫的DLL讀取文檔。無論如何,你需要知道確切的函數聲明格式並創建一個指針。想象一下,這是可以接受的char *作爲輸入功能和返回int作爲輸出,那麼你需要有一個這樣的行對你的.cpp或.c的代碼的頂部:

typedef int (*FUNCTIONTEMPLATE) (char *);