gpt4 book ai didi

javascript - js-ctypes 无效参数

转载 作者:可可西里 更新时间:2023-11-01 11:50:10 26 4
gpt4 key购买 nike

我正在尝试在 Firefox 中使用 js-ctypes 运行 winscard 函数。我有工作的 C 代码,我开始将代码复制到 javascipt。不幸的是,我的第一个函数 - SCardEstablishContext 返回以下错误:

SCARD_E_INVALID_PARAMETER 0x80100004

参数有什么问题?

Components.utils.import("resource://gre/modules/ctypes.jsm");
const NULL = ctypes.voidptr_t(0);

var cardLib = ctypes.open("C:\\WINDOWS\\system32\\WinSCard.dll");
var SCardEstablishContext = cardLib.declare("SCardEstablishContext", ctypes.winapi_abi, ctypes.uint32_t, ctypes.uint32_t, ctypes.voidptr_t, ctypes.voidptr_t, ctypes.voidptr_t);
var ContextHandle = new ctypes.voidptr_t();
var ret = SCardEstablishContext(2, NULL, NULL, ContextHandle);
cardLib.close();

最佳答案

SCardEstablishContext (phContext) 的最后一个参数应该是一个指向 32 位整数的指针。成功后,SCardEstablishContext 会使用 SCARD 上下文的句柄填充此整数值。

您将 ContextHandle 定义为 ctypes.voidptr_t 的新未初始化实例,这与 ctypes.voidptr_t(0) 基本相同(因此,一个空指针)。然后,您将此空指针传递给 SCardEstablishContext,它因此无法分配值(因为引用/指针不受实际数据内存支持)。

因此,您应该将 ContextHandle 定义为 voidptr_t(32 位平台上的 32 位整数/64 位平台上的 64 位整数)

var ContextHandle = ctypes.voidptr_t(0);

然后将指向此ContextHandle指针传递给SCardEstablishContext函数:

var ret = SCardEstablishContext(2, NULL, NULL, ContextHandle.address());

关于javascript - js-ctypes 无效参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31726004/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com