2016-01-13 111 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 *);