puerts / puerts_node

Bind C++ functions and classes into Node.js.
BSD 3-Clause "New" or "Revised" License
14 stars 4 forks source link

多dll相互调用如何在前端实现交互? #2

Open GongYinliang opened 1 year ago

GongYinliang commented 1 year ago

新建第一个模块,Test,新建一个c++类,Test,导出为Test.dll,code如下:

pragma once

include

include

// Shared library support

ifdef WIN32

define EEXPORT __declspec(dllexport)

define EIMPORT __declspec(dllimport)

else

define EEXPORT

define EIMPORT

endif

ifdef TEST_EXPORTS

define TEST_API EEXPORT

else

define TEST_API EIMPORT

endif

class TEST_API Test { public: Test() { std::cout << "Test()" << std::endl; } };

新建第二个模块,Test2,新建一个C++类,Test2,依赖第一个模块,导出为Test2.dll,code如下:

.h

pragma once

include "Test.h"

class Test2 { public: Test2() { Test test; std::cout << "Test2" << std::endl; }

};

.cpp

include

include

include

include "Test2.h"

UsingCppType(Test2); void Init() { puerts::DefineClass() .Constructor() .Register(); }

PESAPI_MODULE(Test2, Init)

node测试js Test.dll和Test2.dll都在Bin目录下:

const puerts = require("puerts");

let Test2Object = puerts.load('../Output/Bin/Test2'); const Testobject = Test2Object.Test2; const obj = new Testobject();

报错信息: Error: dlopen fail for ..\Output\Bin\Test2.dll, error: Win32 error 126 at Object.load (E:\code\PIE-Cloud\PIE-Earth\PIE-Earth-SDK\PIE-Earth\jni\Runtime\PIEEarth-NodeJS\node_modules\puerts\lib\puerts_node.js:28:38) at Object. (E:\code\PIE-Cloud\PIE-Earth\PIE-Earth-SDK\PIE-Earth\jni\Runtime\PIEEarth-NodeJS\js\test.js:4:26) at Module._compile (node:internal/modules/cjs/loader:1256:14) at Module._extensions..js (node:internal/modules/cjs/loader:1310:10) at Module.load (node:internal/modules/cjs/loader:1119:32) at Module._load (node:internal/modules/cjs/loader:960:12) at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:86:12) at node:internal/main/run_main_module:23:47

chexiongsheng commented 1 year ago

https://blog.csdn.net/FlushHip/article/details/96167157