【发布时间】:2011-04-06 08:24:49
【问题描述】:
宏定义为:
#define MAKEINTRESOURCEA(i) ((LPSTR)((ULONG_PTR)((WORD)(i))))
#define MAKEINTRESOURCEW(i) ((LPWSTR)((ULONG_PTR)((WORD)(i))))
为什么这可以用来指示资源 ID(16 位无符号整数)或资源名称(指向 char 数组的指针)? 这不会有效地将地址空间(在 32 位系统上)限制为 16 位吗?否则系统怎么知道我用的是ID还是名字?
【问题讨论】:
-
这些宏总是让我感到困惑。为什么他们不只是实现两个单独的函数,一个接受整数 ID,另一个接受字符串......
-
谢谢,这正是我想要的。
-
@dreamlax:不这样做实际上解决了它最初创建的问题之一;)DLL中的所有数据和函数都被分配了一个序数,并且序数可以在适当的位置使用如果你愿意的话。这将 DLL 中可用序数的数量限制为 65K(具有讽刺意味的是,由于这个宏的存在以及它如何与
GetProcAddress交互)。如果您想通过拥有多个版本的函数来保持 DLL 版本之间的 ABI 兼容性,每个版本都有唯一的序数,那么阻塞的函数越少越好。