gpt4 book ai didi

javascript - 使用 js-ctypes 进行 Win32 打印失败并出现 ERROR_INVALID_HANDLE

转载 作者:行者123 更新时间:2023-11-28 02:01:36 25 4
gpt4 key购买 nike

我正在将二进制组件转换为 js-ctypes,而 StartPagePrinter 给了我 ERROR_INVALID_HANDLE。我正在使用标准 Windows 技术进行打印。 (搜索“MSDN WritePrinter”以查看基本步骤。)我想我要么使用了错误的类型,要么没有进行某种类型的转换。

我没有使用 ctypes.uintptr_t 作为 jobHandle,而是尝试了 ctypes.intptr_t、ctypes.voidptr_t 和 ctypes.int32_t。它们都因相同的错误而失败。

我必须承认,这是我在 30 年职业生涯中完成的第一个 Win32 编程,所以请耐心等待。

这是代码片段:

Components.utils.import('resource://gre/modules/ctypes.jsm');
var winspoolLib = ctypes.open('winspool.drv');
var spoolssLib = ctypes.open('spoolss');
const docNameLength = 32;
const printer = "My Printer"; // A valid, configured printer
var jobHandle = new ctypes.uintptr_t(0);
var openPrinter = winspoolLib.declare(
"OpenPrinterW", ctypes.winapi_abi, ctypes.bool, ctypes.jschar.ptr,
ctypes.uintptr_t.ptr, ctypes.voidptr_t
);
if (openPrinter(printer, jobHandle.address(), null)) {
const docInfo1 = new ctypes.StructType(
"docInfo1",
[
{pDocName: ctypes.jschar.ptr},
{pOutputFile: ctypes.voidptr_t},
{pDataType: ctypes.voidptr_t}
]
);
var startDocPrinter = winspoolLib.declare(
"StartDocPrinterW", ctypes.winapi_abi, ctypes.int32_t,
ctypes.uintptr_t, ctypes.int32_t, docInfo1.ptr
);
var docInfo = new docInfo1(
ctypes.jschar.array(docNameLength)('MYJOB'), null, null
);
var job = startDocPrinter(jobHandle, 1, docInfo.address());
if (job != 0) {
var startPagePrinter = spoolssLib.declare(
"StartPagePrinter", ctypes.winapi_abi, ctypes.bool,
ctypes.uintptr_t
);
if (! startPagePrinter(jobHandle))
// Always fails with ERROR_INVALID_HANDLE (6)
alert('There was an error: ' + ctypes.winLastError);
}
}

最佳答案

我成功了!忽略 MSDN 文档,不要使用 spoolss.dll。使用winspool.dll 中的所有函数。这就是答案。

不需要使用RAW设置。 Null 工作正常。

最后,voidptr_t 是正确的类型。

关于javascript - 使用 js-ctypes 进行 Win32 打印失败并出现 ERROR_INVALID_HANDLE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18371056/

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