我应该从JS代码中调用DLL (Win x64)函数。
C中的定义:
typedef void* HNDL;
ABCD_DLL_DECL DWORD WINAPI ABCD_Create(HNDL* pHNDL);所以HNDL是一个指针,创建函数将返回一个对象指针(pHNDL)。
我尝试在JS中使用这些:
const Handle = koffi.pointer("Handle", koffi.opaque());
const ABCD_Create = lib.func("uint __stdcall ABCD_Create(_Inout_ Handle *pHandle)";
let hHandle;
let err = ABCD_Create(hHandle);或
const ABCD_Create = lib.func("uint __stdcall ABCD_Create(_Inout_ void *phandle)";或
const Handle = koffi.opaque();
const ABCD_Create = lib.func("ABCD_Create", "uint", [koffi.out(koffi.pointer(Handle, 2))]);在koffi文档中的示例中,我尝试了许多这些和其他示例的组合,但是当我调用create函数时,我总是在VSCode中得到“代码3221225477退出的进程”。(原始代码在VC和Delphi中工作得很好.)此错误号为0xC0000005。这意味着访问违规。所以我认为某个地方的参数传递是错误的。
我应该如何定义它并正确调用create函数(使用koffi)?
发布于 2022-10-12 09:51:45
我在koffi测试(sqlite.js)中发现了一个类似的例子。因此,以下声明是有效的:
const Handle = koffi.opaque("Handle");
const ABCD_Create = lib.func("ABCD_Create","uint", koffi.out(koffi.pointer(Handle, 2))]";..。而召唤:
let phandle = [null];
let handle = null;
const err = ABCD_Create(phandle);
if (err != 0) {
console.error(`Create failed. Error = ${err}`);
return;
}
handle = phandle[0];https://stackoverflow.com/questions/73989309
复制相似问题