Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.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
.net 可在32位(x86)和64位(x64)平台上运行的自定义windows窗体控件_.net_Winforms - Fatal编程技术网

.net 可在32位(x86)和64位(x64)平台上运行的自定义windows窗体控件

.net 可在32位(x86)和64位(x64)平台上运行的自定义windows窗体控件,.net,winforms,.net,Winforms,我想创建从现有winform控件派生的自定义windows窗体控件。例如,TextBoxEx将从System.Windows.Forms.TextBox派生。这些新的自定义控件将改变外观,并向现有控件添加一些额外的功能。这将通过进行适当的win32 API调用来实现 我想确保开发的自定义控件适用于32位和64位平台。我想根据你的经验(如果有的话)知道实现这一目标的最佳方法 你不必做任何特别的事。无论您使用的是32位还是64位,底层Windows API都是相同的 保存指针大小的数据类型(例如窗口

我想创建从现有winform控件派生的自定义windows窗体控件。例如,TextBoxEx将从System.Windows.Forms.TextBox派生。这些新的自定义控件将改变外观,并向现有控件添加一些额外的功能。这将通过进行适当的win32 API调用来实现


我想确保开发的自定义控件适用于32位和64位平台。我想根据你的经验(如果有的话)知道实现这一目标的最佳方法

你不必做任何特别的事。无论您使用的是32位还是64位,底层Windows API都是相同的


保存指针大小的数据类型(例如窗口句柄)浮动在32位和64位之间,具体取决于目标平台。因此,对于P/Invoke,它们被声明为
IntPtr
。只要正确,代码将在两种平台上都能工作。

我知道它将绑定到正确的dll。例如,如果我使用的是user32.dll,它将绑定到32位平台上的32位版本,如果在64位平台上执行,则绑定到64位版本。但是user32.dll中有像SetWindowLong32和SetWindowLongPtr64这样的win32 API。我需要根据所支持的平台在这两个API的代码中做出选择。请给出建议。不,该API在32和64上都称为SetWindowLongPtr。API之间几乎没有区别。最初我有相同的印象,但请看:好的,没错,32位DLL中没有Ptr版本。所以这是为数不多的例外之一。您可以使用该问题中的Hans代码,以及SetWindowLong的匹配代码。你不会遇到太多这样的异常,如果只有很少的异常,那么就可以用Hans()建议的方式在代码中处理。谢谢你,大卫。我已将你的回答标记为答案。