VC++ | VS2017编译报错-20230428
文章目录
- VC++ | VS2017编译报错-20230428
- 1.报错
- 1-1.解决办法
- 2.报错
- 2-1.解决办法
- 2-1-1.做如下设置
- 2-1-2.代码调整
1.报错
1>------ 已启动生成: 项目: NvtUSBTool, 配置: Debug Win32 ------
1>NvtUSBTool.cpp
1>$(PRJ_ROOT_DIR)nvtusbtool\nvtusbtool.cpp(29): error C2664: “FARPROC GetProcAddress(HMODULE,LPCSTR)”: 无法将参数 2 从“const wchar_t [26]”转换为“LPCSTR”
1>$(PRJ_ROOT_DIR)nvtusbtool\nvtusbtool.cpp(29): note: 与指向的类型无关;强制转换要求 reinterpret_cast、C 样式强制转换或函数样式强制转换
1>$(PRJ_ROOT_DIR)nvtusbtool\nvtusbtool.cpp(30): error C2664: “FARPROC GetProcAddress(HMODULE,LPCSTR)”: 无法将参数 2 从“const wchar_t [30]”转换为“LPCSTR”
1>$(PRJ_ROOT_DIR)nvtusbtool\nvtusbtool.cpp(30): note: 与指向的类型无关;强制转换要求 reinterpret_cast、C 样式强制转换或函数样式强制转换
1>$(PRJ_ROOT_DIR)nvtusbtool\nvtusbtool.cpp(31): error C2664: “FARPROC GetProcAddress(HMODULE,LPCSTR)”: 无法将参数 2 从“const wchar_t [22]”转换为“LPCSTR”
1>$(PRJ_ROOT_DIR)nvtusbtool\nvtusbtool.cpp(31): note: 与指向的类型无关;强制转换要求 reinterpret_cast、C 样式强制转换或函数样式强制转换
1>$(PRJ_ROOT_DIR)nvtusbtool\nvtusbtool.cpp(32): error C2664: “FARPROC GetProcAddress(HMODULE,LPCSTR)”: 无法将参数 2 从“const wchar_t [24]”转换为“LPCSTR”
1>$(PRJ_ROOT_DIR)nvtusbtool\nvtusbtool.cpp(32): note: 与指向的类型无关;强制转换要求 reinterpret_cast、C 样式强制转换或函数样式强制转换
1>$(PRJ_ROOT_DIR)nvtusbtool\nvtusbtool.cpp(33): error C2664: “FARPROC GetProcAddress(HMODULE,LPCSTR)”: 无法将参数 2 从“const wchar_t [24]”转换为“LPCSTR”
1>$(PRJ_ROOT_DIR)nvtusbtool\nvtusbtool.cpp(33): note: 与指向的类型无关;强制转换要求 reinterpret_cast、C 样式强制转换或函数样式强制转换
1>$(PRJ_ROOT_DIR)nvtusbtool\nvtusbtool.cpp(34): error C2664: “FARPROC GetProcAddress(HMODULE,LPCSTR)”: 无法将参数 2 从“const wchar_t [18]”转换为“LPCSTR”
1>$(PRJ_ROOT_DIR)nvtusbtool\nvtusbtool.cpp(34): note: 与指向的类型无关;强制转换要求 reinterpret_cast、C 样式强制转换或函数样式强制转换
1>$(PRJ_ROOT_DIR)nvtusbtool\nvtusbtool.cpp(35): error C2664: “FARPROC GetProcAddress(HMODULE,LPCSTR)”: 无法将参数 2 从“const wchar_t [17]”转换为“LPCSTR”
1>$(PRJ_ROOT_DIR)nvtusbtool\nvtusbtool.cpp(35): note: 与指向的类型无关;强制转换要求 reinterpret_cast、C 样式强制转换或函数样式强制转换
1>已完成生成项目“NvtUSBTool.vcxproj”的操作 - 失败。
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
1>------ 已启动生成: 项目: NvtUSBTool, 配置: Debug Win32 ------
1>NvtUSBTool.cpp
nvtusbtool.cpp(29): error C2664: “FARPROC GetProcAddress(HMODULE,LPCSTR)”: 无法将参数 2 从“const wchar_t [26]”转换为“LPCSTR”
nvtusbtool.cpp(29): note: 与指向的类型无关;强制转换要求 reinterpret_cast、C 样式强制转换或函数样式强制转换
nvtusbtool.cpp(30): error C2664: “FARPROC GetProcAddress(HMODULE,LPCSTR)”: 无法将参数 2 从“const wchar_t [30]”转换为“LPCSTR”
nvtusbtool.cpp(30): note: 与指向的类型无关;强制转换要求 reinterpret_cast、C 样式强制转换或函数样式强制转换
nvtusbtool.cpp(31): error C2664: “FARPROC GetProcAddress(HMODULE,LPCSTR)”: 无法将参数 2 从“const wchar_t [22]”转换为“LPCSTR”
nvtusbtool.cpp(31): note: 与指向的类型无关;强制转换要求 reinterpret_cast、C 样式强制转换或函数样式强制转换
nvtusbtool.cpp(32): error C2664: “FARPROC GetProcAddress(HMODULE,LPCSTR)”: 无法将参数 2 从“const wchar_t [24]”转换为“LPCSTR”
nvtusbtool.cpp(32): note: 与指向的类型无关;强制转换要求 reinterpret_cast、C 样式强制转换或函数样式强制转换
nvtusbtool.cpp(33): error C2664: “FARPROC GetProcAddress(HMODULE,LPCSTR)”: 无法将参数 2 从“const wchar_t [24]”转换为“LPCSTR”
nvtusbtool.cpp(33): note: 与指向的类型无关;强制转换要求 reinterpret_cast、C 样式强制转换或函数样式强制转换
nvtusbtool.cpp(34): error C2664: “FARPROC GetProcAddress(HMODULE,LPCSTR)”: 无法将参数 2 从“const wchar_t [18]”转换为“LPCSTR”
nvtusbtool.cpp(34): note: 与指向的类型无关;强制转换要求 reinterpret_cast、C 样式强制转换或函数样式强制转换
nvtusbtool.cpp(35): error C2664: “FARPROC GetProcAddress(HMODULE,LPCSTR)”: 无法将参数 2 从“const wchar_t [17]”转换为“LPCSTR”
nvtusbtool.cpp(35): note: 与指向的类型无关;强制转换要求 reinterpret_cast、C 样式强制转换或函数样式强制转换
1>已完成生成项目“NvtUSBTool.vcxproj”的操作 - 失败。
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
获取DLL中函数的地址:
FARPROC GetProcAddress( HMODULE hModule, LPCSTR lpProcName);
hModule
:动态链接库模块的句柄;
LPCSTR
:一个指向常量的字符指针,指定DLL导出函数的名字或函数的序号;
1-1.解决办法
#define X_API_LOAD(lib,fn) fn = (I##fn)GetProcAddress(lib,TEXT(#fn))
修改如下:
#define X_API_LOAD(lib,fn) fn = (I##fn)GetProcAddress(lib,(LPCSTR)TEXT(#fn))
2.报错
编译OK后,运行报错:
0x00000000
处(位于 NvtUSBTool.exe 中)引发的异常:0xC0000005
: 执行位置0x00000000
时发生访问冲突。 出现了
2-1.解决办法
2-1-1.做如下设置
属性-》配置属性-》常规-》字符集:将使用
Unicode
字符集修改为使用多字节字符集;
编译时报错;
1>------ 已启动生成: 项目: NvtUSBTool, 配置: Release Win32 ------ 1>NvtUSBTool.cpp 1>$(PRJ_ROOT_DIR)nvtusbtool\nvtusbtool.cpp(19): error C2664: “HMODULE LoadLibraryA(LPCSTR)”: 无法将参数 1 从“const wchar_t [10]”转换为“LPCSTR” 1>$(PRJ_ROOT_DIR)nvtusbtool\nvtusbtool.cpp(19): note: 与指向的类型无关;强制转换要求 reinterpret_cast、C 样式强制转换或函数样式强制转换 1>已完成生成项目“NvtUSBTool.vcxproj”的操作 - 失败。 ========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
2-1-2.代码调整
原代码
BOOL NvUSB_Init(void)
{
hLibNvUSB = LoadLibrary(L"NvUSB.dll");
if (!hLibNvUSB) {
printf("Cannot find NvUSB.all\n");
return false;
}
X_API_LOAD(hLibNvUSB, NvUSB_EnumAvailableDevice);
X_API_LOAD(hLibNvUSB, NvUSB_GetFirstAvailableDevice);
X_API_LOAD(hLibNvUSB, NvUSB_ConnectToDevice);
X_API_LOAD(hLibNvUSB, NvUSB_VenderCmd_GetData);
X_API_LOAD(hLibNvUSB, NvUSB_VenderCmd_SetData);
X_API_LOAD(hLibNvUSB, NvUSB_MemoryWrite);
X_API_LOAD(hLibNvUSB, NvUSB_MemoryRead);
return true;
}
修改如下:
hLibNvUSB = LoadLibrary("NvUSB.dll");