Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Winapi 不使用GetWindowThreadProcessId(c#.net 4.0)从窗口句柄获取进程id_Winapi_C# 4.0_.net 4.0_Interprocess_Intptr - Fatal编程技术网

Winapi 不使用GetWindowThreadProcessId(c#.net 4.0)从窗口句柄获取进程id

Winapi 不使用GetWindowThreadProcessId(c#.net 4.0)从窗口句柄获取进程id,winapi,c#-4.0,.net-4.0,interprocess,intptr,Winapi,C# 4.0,.net 4.0,Interprocess,Intptr,我们的应用程序最近从.NET3.5切换到.NET4。出现的一个问题是GetWindowThreadProcessId不再工作 微软有一个可用的热修复程序,但在每台客户机器上安装它会很痛苦,而且可能会导致其他问题。我更喜欢在附近工作 如microsoft所述,问题在于: 在.NET Framework远程处理应用程序中,您有一个MarshallByRefObject对象。该对象包含一个返回IntPtr类型的方法。该对象通过进程边界传递。当对象序列化时,会引发SerializationExcept

我们的应用程序最近从.NET3.5切换到.NET4。出现的一个问题是GetWindowThreadProcessId不再工作

微软有一个可用的热修复程序,但在每台客户机器上安装它会很痛苦,而且可能会导致其他问题。我更喜欢在附近工作

如microsoft所述,问题在于:

在.NET Framework远程处理应用程序中,您有一个MarshallByRefObject对象。该对象包含一个返回IntPtr类型的方法。该对象通过进程边界传递。当对象序列化时,会引发SerializationException异常,您会收到以下错误消息: 流“Invalid”中的类型代码无效 出现此问题的原因是,当CLR序列化IntPtr时,远程处理代码将IntPtr类型视为基元类型。但是,当二进制格式化程序序列化IntPtr时,远程处理代码将IntPtr类型视为无效类型。”


那么,还有其他选择吗?是否有其他方法可以从窗口句柄获取进程id?或者我可以以不同的方式封送我的IntPtr以避免此错误吗?

是否尝试将返回值替换为空值?(因为我认为您不需要线程id)

而不是:

[DllImport("user32.dll", SetLastError=true)]
static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);
[DllImport("user32.dll", SetLastError=true)]
static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);