web、nodejs 或者 electron 如何调用 c++的 dll 动态库?

2021-10-19 11:12:00 +08:00
 uniy

https://github.com/node-ffi/node-ffi 已经 3 年没有更新了,看来这种方案并不是那么完美,有现在正在使用的吗. 尝试了多次,报错问题频繁,有没有别的方式去调用 dll?

2368 次点击
所在节点    JavaScript
8 条回复
Mikewu
2021-10-19 11:19:08 +08:00
AoEiuV020
2021-10-19 11:19:31 +08:00
node-gyp
wszgrcy
2021-10-19 11:41:31 +08:00
我记得有个人 fork 了一份,然后继续维护了.
g00001
2021-10-19 12:19:16 +08:00
aardio 里网页调用原生 DLL 相对简单一些。

嵌入 Electron 组件调用 DLL :
---------------------------

import electron.app;
var theApp = electron.app();

theApp.html = /**
<script>
aardio = require("aardio");
aardio.msgBox("内容","标题");
</script>
**/

theApp.external = {
msgBox = function(text,caption){
::User32.MessageBox(theApp.hwndChrome,text,caption,0)
}
}

theApp.start("/res/index.html");
win.loopMessage();


WebView2 调用 DLL :
---------------------------

import win.ui;
var winform = win.form(text="WebView2")

import web.view;
var wb = web.view(winform);
wb.external = {
msgBox = function(text,caption){
::User32.MessageBox(winform.hwnd,text,caption,0)
}
}

wb.html = /**
<script> aardio.msgBox("内容","标题");</script>
**/

winform.show();
win.loopMessage();


JavaScript 直接调用 DLL :
---------------------------

import win.ui;
var winform = win.form(text="JS 直接调用 WinAPI")

import web.blink.form;
var mb = web.blink.form(winform);
web.blink.export(
user32 = ::User32;//导出 DLL 对象为 JS 全局变量
form = winform; //窗口对象也可以导出为 JS 变量
blink = mb; //mb 自己也可以导出为 JS 变量
);

mb.html = /**
<a href='javascript:
user32.MessageBox(0,"JS 直接调用 WinAPI","user32.MessageBox",0)
'>JS 直接调用 WinAPI 函数试一下</a>
**/

winform.show()
win.loopMessage();
ysc3839
2021-10-19 13:02:32 +08:00
建议把错误信息说清楚。
不用 ffi 的话基本上要自己写模块封装了,可能会更麻烦。
dcsuibian
2021-10-19 13:20:55 +08:00
不清楚具体场景。有没有可能弄一个 C++进程,一个 js 进程,通过网络通讯呢?
参考微服务,感觉很麻烦,但是通用性很强。
uniy
2021-10-19 14:14:36 +08:00
@dcsuibian 这种是行的通的,做过尝试,就是本地起一个 websocket 服务,但还是觉得略繁琐
Takashi123
2021-10-19 17:27:55 +08:00
node-gyp+1

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/808795

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX