【问题标题】:Custom windows form controls that could run on both 32bit (x86) and 64bit (x64) platform可在 32 位 (x86) 和 64 位 (x64) 平台上运行的自定义窗体控件
【发布时间】:2011-03-18 20:26:47
【问题描述】:

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

我想确保开发的自定义控件适用于 32 位和 64 位平台。我想根据您的经验(如果有的话)了解实现它的最佳方法。

【问题讨论】:

    标签: .net winforms


    【解决方案1】:

    您不必做任何特别的事情。无论您使用的是 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 之间几乎没有区别。
    • 一开始我也有同样的印象,但看到这个:stackoverflow.com/questions/3343724/…
    • 好的,没错,32 位 DLL 中没有 Ptr 版本。所以这是极少数例外之一。您可以只使用该问题中的 Hans 代码,以及 SetWindowLong 的匹配代码。你不会遇到太多这样的事情了。
    • 如果只有少数这样的异常,那么可以在代码中处理 - Hans (stackoverflow.com/questions/3343724/…) 建议的方式。谢谢大卫。我已将您的回复标记为答案。
    猜你喜欢
    • 1970-01-01
    • 2014-03-10
    • 2016-11-30
    • 2015-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多