MAKEINTRESOURCE进行地址转换时的问题

zxpsunshine 2005-12-01 11:27:26
当使用导出函数的序号来调用dll中的函数时,需要使用MAKEINTRESOURCE宏来将序号转换成一个字符串地址,也就是使用如下形式:
GetProcAddress(dllhandle, MAKEINTRESOURCE(10));
我查看了一下MAKEINTRESOURCE的定义,它是((ULONG_PTR)(USHORT)),其实也就是((unsigned int)(unsigned short)),不知道为什么先要转换成16位的地址,然后再转换为32位地址,难道只能寻址64k吗?还有,GetProcAddress的第二个参数是一个LPCSTR类型,LPCSTR是一个const char *,为什么可以被赋值成一个((unsigned int)(unsigned short)),而不需要任何强制类型转换?谢谢!
...全文
124 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
lxpws 2005-12-01
  • 打赏
  • 举报
回复
在winuser.h中它的定义可能有两个:
#define MAKEINTRESOURCEA(i) (LPSTR)((ULONG_PTR)((WORD)(i)))
#define MAKEINTRESOURCEW(i) (LPWSTR)((ULONG_PTR)((WORD)(i)))
咱们用的应该是这两个之一,而不是ks.h中的那个。
因为GetProcAddress的第二个参数为const char*,而我们提供的是一个序号,所以用它来强制类型转换,没别的用途。。。
先转成WORD的意思是因为一个dll输出函数个数的限制。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧