当前位置:  开发笔记 > 编程语言 > 正文

GetWindowLong与C#中的GetWindowLongPtr

如何解决《GetWindowLong与C#中的GetWindowLongPtr》经验,为你挑选了2个好方法。

我像这样使用GetWindowLong:

[DllImport("user32.dll")]
private static extern IntPtr GetWindowLong(IntPtr hWnd, int nIndex);

但根据MSDN文档,我应该使用GetWindowLongPtr与64位兼容. http://msdn.microsoft.com/en-us/library/ms633584(VS.85).aspx

GetWindowLongPtr的MSDN文档说我应该像这样定义它(在C++中):

LONG_PTR GetWindowLongPtr(HWND hWnd, int nIndex);

我曾经使用IntPtr作为返回类型,但是我将使用什么来替代LONG_PTR?我也看到在C#中将GetWindowLong定义为:

[DllImport("user32.dll")]
private static extern long GetWindowLong(IntPtr hWnd, int nIndex);

什么是正确的,我如何确保正确的64位兼容性?



1> SoapBox..:

您应该使用IntPtr定义GetWindowLongPtr.在C/C++中,LONG_PTR在32位系统上为32位,在64位系统上为64位(参见此处).C#中的IntPtr设计为以相同的方式工作(参见此处).

所以你想要的是:

[DllImport("user32.dll")]
private static extern IntPtr GetWindowLongPtr(IntPtr hWnd, int nIndex);



2> 小智..:

不幸的是,这并不容易,因为在32位Windows中不存在GetWindowLongPtr.在32位系统上,GetWindowLongPtr只是一个指向GetWindowLong的C宏.如果你真的需要在32位和64位系统上使用GetWindowLongPtr,你必须确定在运行时调用正确的一个.请参阅pinvoke.net上的说明

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有