【问题标题】:How to pinvoke GetExitCodeProcess with negative exit codes?如何使用负退出代码 pinvoke GetExitCodeProcess?
【发布时间】:2023-03-24 06:47:01
【问题描述】:

GetExitCodeProcess 的 pinvoke 文档显示了以无符号整数 (uint) 形式返回的退出代码。如何处理退出代码值为负的进程? LPDWORD 是否正确分配给 uint 还是 pinvoke doc 中的错误?

pinvoke 文档: http://www.pinvoke.net/default.aspx/kernel32.getexitcodeprocess

win32 api 文档: http://msdn.microsoft.com/en-us/library/ms683189(v=vs.85).aspx

【问题讨论】:

    标签: c# .net winapi pinvoke


    【解决方案1】:

    DWORD in unsigned integer.

    一个 32 位无符号整数。范围是 04294967295 十进制。

    该类型在 WinDef.h 中声明如下:

    typedef unsigned long DWORD;
    

    这里没有错误。

    【讨论】:

    • bizzare...作为测试,我创建了一个返回负退出代码的进程。我创建了另一个进程来启动第一个进程,等待它退出,然后 pinvoke 以获取退出代码。我更改了 pinvoke 定义以接受 int 而不是 uint,并且我得到了正确的负退出代码。不知道怎么解释。
    • @SFun28 这是integer overflow解释的。
    • 更准确地说,这两个数字(一个负符号和一些大的正无符号)具有相同的二进制表示,这在逻辑上根据该值是否“已知”而不同签名/未签名。
    猜你喜欢
    • 1970-01-01
    • 2019-12-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-19
    • 1970-01-01
    • 1970-01-01
    • 2014-10-21
    • 1970-01-01
    相关资源
    最近更新 更多