电子本机添加:DLL初始化例程失败

我正尝试将我的C ++库作为本地附加组件连接到我的电子应用程序。 我能够运行node-gyp重build并生成一个成功的.node文件。

但是,当我尝试从main.js调用它,我得到一个错误,说:“dynamic链接库(DLL)初始化例程失败”。

我的binding.gyp文件如下所示:

{ 'targets': [ { # Usual target name/sources, etc. 'target_name': 'myclass', 'sources': [ 'myclass.cc', 'addon.cc' ], 'libraries': ["../libs/api.lib", "../libs/core.lib", "../libs/camera.lib", "../libs/algo.lib", "../libs/ComCtl32.lib", "../../deps/windows/opencv/lib/x64/*.lib", "../../deps/windows/tbb/lib/x64/*.lib"], 'include_dirs': ["<!(node -e \"require('nan')\")"], 'configurations': { 'Debug': { 'msvs_settings': { 'VCCLCompilerTool': { 'RuntimeLibrary': '3' # /MDd }, }, }, 'Release': { 'msvs_settings': { 'VCCLCompilerTool': { 'RuntimeLibrary': '2' # /MD }, }, }, }, },], } 

什么可能是错的? 请让我知道是否需要更多的信息。

一些事情可能会出错…

x64与x86

您需要确保获得正确的x86 v x64二进制文件。 例如,x64二进制文件只能在x64版本的节点上运行。 我看到你直接链接到一些x64库,你可能需要有条件地链接到正确的库基于你的目标架构。 然后确保你得到正确的电子版本。

依赖dll

确保你所依赖的dll位于正确的位置。 基本上他们应该是在同一目录或旁边的试图加载DLL的exe。

它看起来像你使用的Windows所以尝试使用这个工具来打开你的DLL,看看它的依赖是什么依赖

需要注意的是,当你用node-gyp进行重build时,dll现在只能用电子打开,所以你必须做一些神奇的事情才能让它从命令行加载到节点中,而不需要进一步的重新编译。

你怎么实际上试图加载DLL?

版本

你必须有节点,电子和node-gyp的精确版本。 三重检查他们。

如果您需要更多的细节,我可以详细说明这些主题。

npm install -g prebuild

cd node_modules / ffi prebuild -t 1.3.1 -r electron

cd node_modules / ref prebuild -t 1.3.1 -r electron

“1.3.1”是电子的版本