"char *" 类型的实参与 "LPWSTR" 类型的形参不兼容
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 个重载中没有一个可以转换所有参数类型
新手已经头都大了,求大神支招,感激不尽!
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 个重载中没有一个可以转换所有参数类型
新手已经头都大了,求大神支招,感激不尽!
...全文
相关推荐
BSTR、LPSTR和LPWSTR
BSTR,LPSTR,LPWSTR,char*和CString相互转换。
char*转为LPCWSTR
char*转为LPCWSTR,在UNICODE环境下通常使用的是双字节,LPCWSTR类型是其中之一。VS2008就是UNICODE环境,而VC++6.0则是ASCI环境
C++中char*转换为LPCWSTR的解决方案
最近在学习C++,遇到了一个char*转换为LPCWSTR的问题,通过查找资料终于解决了,所以下面这篇文章主要介绍了C++中char*转LPCWSTR的解决方案,文中通过详细的示例代码介绍的很详细,有需要的朋友可以参考借鉴,下面来一起看看吧。
C++到C#数据类型转换
C++和C#之间使用不同数据类型,当使用不同的语言实现时就需要转换数据类型
C#与C++类型对应表
在用C#调用C++的API,需要类型转换了,这个文档可以很好解决这个问题,需要的同学,可以下载下来看下


