"char *" 类型的实参与 "LPWSTR" 类型的形参不兼容

qq_37015187 2017-01-14 02:30:01
VS2015,一个查找程序DLL句柄的函数,网上抄的,大致如下:
char szModName[MAX_PATH];
HMODULE hMods[256];
DWORD cbNeeded;

EnumProcessModules(进程句柄, hMods, sizeof(hMods), &cbNeeded);
for (i = 0; i < (cbNeeded / sizeof(HMODULE)); i++)
{
if (GetModuleFileNameEx(进程句柄, hMods[i], szModName, sizeof(szModName)))
{
if (strstr(szModName, XXX.dll))
{
return hMods[i];
}
}
}

一.Debug模式下生成不报错,EXE运行正常,可以获取句柄
二.Release模式下生成报错:
1.“DWORD K32GetModuleFileNameExW(HANDLE,HMODULE,LPWSTR,DWORD)”: 无法将参数 3 从“char [260]”转换为“LPWSTR”
2."char *" 类型的实参与 "LPWSTR" 类型的形参不兼容

三.尝试:
1.将参数3强制转换为LPWSTR,可以生成,但是程序运行获取不了句柄.
2.把char szModName[MAX_PATH];改成TCHAR或者wchar_t类型的话.后面那句strstr(szModName, XXX.dll)报错C2665 “strstr”: 2 个重载中没有一个可以转换所有参数类型

新手已经头都大了,求大神支招,感激不尽!
...全文
8381 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
paschen 版主 2017-01-14
  • 打赏
  • 举报
回复 2
项目属性中设置使用多字节字符 或者char szModName[MAX_PATH]; 用 TCHAR szModName[MAX_PATH];
Huichin 2021-07-06
  • 举报
回复 1
@paschen 按第二点改完,改完以后编译无错误,但是运行会出错
lunat 2017-01-14
  • 打赏
  • 举报
回复 2
GetModuleFileNameExA
Huichin 2021-07-06
  • 举报
回复
@lunat #ifdef UNICODE #define GetModuleFileName GetModuleFileNameW #else #define GetModuleFileName GetModuleFileNameA #endif // !UNICODE (如若是unicode字符集-&gt;GetModuleFileNameW,如果不是-&gt;改为GetModuleFileNameA)
FD_2013 2017-01-14
  • 打赏
  • 举报
回复
右键工程-》属性-》常规 ----字符集改为-----多字节字符集,,具体改成什么,参照你debug里相同位置的配置是什么字符集(因为你debug能编译过,说明你debug里用的字符集跟代码里用到的字符操作类型函数是一致的)
qq_37015187 2017-01-14
  • 打赏
  • 举报
回复 1
引用 2 楼 lunat 的回复:
GetModuleFileNameExA
老师一语中的!!!测试成功!!!!! 我看了一下函数有个宏,是这么写的 #ifdef UNICODE #define GetModuleFileNameEx GetModuleFileNameExW #else #define GetModuleFileNameEx GetModuleFileNameExA #endif // !UNICODE
Huichin 2021-07-06
  • 举报
回复
@qq_37015187 这个方法我也实验成功了~~
qq_37015187 2017-01-14
  • 打赏
  • 举报
回复
引用 3 楼 paschen 的回复:
项目属性中设置使用多字节字符 或者char szModName[MAX_PATH]; 用 TCHAR szModName[MAX_PATH];
已经是多字节字符集,而且尝试里面第二点 2.把char szModName[MAX_PATH];改成TCHAR或者wchar_t类型的话.后面那句strstr(szModName, XXX.dll)报错C2665 “strstr”: 2 个重载中没有一个可以转换所有参数类型
qq_37015187 2017-01-14
  • 打赏
  • 举报
回复
引用 1 楼 zhu339111520 的回复:
右键工程-》属性-》常规 ----字符集改为-----多字节字符集,,具体改成什么,参照你debug里相同位置的配置是什么字符集(因为你debug能编译过,说明你debug里用的字符集跟代码里用到的字符操作类型函数是一致的)
本身就是设置多字节字符集的情况下

65,179

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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