winapi - 在 64 位架构的内存中创建对话框模板
问题描述
对话框模板DialogBoxIndirect()
也可以在内存中构建。MSDN 实际上有关于如何执行此操作的非常详细的说明(请参见此处)。
但是,从 64 位的角度来看,Microsoft 的示例代码中存在一些问题。这是一个被调用的函数lpwAlign()
,它似乎接受一个指针并将其与 DWORD 边界对齐。该函数如下所示:
LPWORD lpwAlign(LPWORD lpIn)
{
ULONG ul;
ul = (ULONG)lpIn;
ul ++;
ul >>=1;
ul <<=1;
return (LPWORD)ul;
}
AFAICS,当在 64 位系统上编译时,这会将 64 位指针转换为 32 位整数,将该整数填充为 4 的倍数,然后将其作为 64 位指针返回。因此,一旦涉及高于 2^32 的指针值,这看起来就会崩溃。那么这段代码应该如何适应 64 位呢?
解决方案
推荐阅读
- hibernate - 在多个应用程序中使用 Hibernate 的单个全文索引实例
- batch-file - 如何将表达式的结果存储到 Windows 批处理脚本中的变量中?
- sql - 如何在 T-sql 中的另一个表上选择具有最后一个相关记录的表的记录
- arm - 代码执行利用 Cortex M4
- ios - 点击时如何突出显示人体解剖结构的不同部分
- c# - Assembly.LoadAssembly、MEF 和 MAF:它们如何管理不同的框架程序集以及如何不锁定加载的程序集?
- error-handling - Angular GlobalErrorHandler 和 HttpErrorResponse - 解析器抛出格式错误的 HttpErrorResponse
- c# - CLR GC 线程行为:SafeFileHandle 意外完成
- git - git:提交/推送的更好方式
- android - 如何处理数据格式的改造转换?