【问题标题】:How to use an external dll when building a vst under windowswindows下构建vst时如何使用外部dll
【发布时间】:2016-01-13 17:00:43
【问题描述】:

我正在尝试在 Windows 10 x64 下使用带有 JUCE vst 插件的 Leap motion sdk。

我已经设置了我的项目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 一起使用。如何做到这一点?

【问题讨论】:

  • 并试图 regsvr32 他们你为什么这样做?我在说明中根本没有看到 regsvr32。您是否将 dll 复制到与您的应用程序可执行文件(例如示例中的 xcopy 部分)相同的位置?
  • 是的,我确实将 Leap dll 复制到了与我的插件 dll 相同的文件夹中——我的输出是 dll,而不是 .exe。我尝试了 regsvr32 技术(在系统文件夹中使用 dll),因为这在过去对我使用其他 dll 有效。因为我不知道还能做什么!
  • 您是否为 SDK 构建了 dll(未注册我无法下载查看)?我问是因为如果您下载了二进制版本并且您没有正确的 dll 依赖项(安装在您的系统上),即使您在正确的文件夹中也不会加载 dll。
  • 你的结论相当落后,当它确实依赖于 Leap 时它就停止工作了。可能是缺少 DLL,使用 SysInternals 的进程监视器查看您的 DAW 是否正在寻找它。
  • @drescherjm,我认为您指的是 Leap SDK?他们不提供源代码,只提供 dll。并且没有静态库。他们的说明清楚地表明我们只需要 Leap.dll。并且使用 Leap.dylib 可以在 mac 上运行。

标签: c++ windows dll leap-motion vst


【解决方案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 *);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-18
    • 1970-01-01
    • 2021-09-30
    相关资源
    最近更新 更多