VC++ | VS2017编译报错-20230428
1.报错
1>------ 已启动生成: 项目: NvtUSBTool, 配置: Debug Win32 ------
1>NvtUSBTool.cpp
1>d:\05_study\mark-down-doc\17-vc++\demosource\nvtusbtool\nvtusbtool\nvtusbtool.cpp(29): error C2664: “FARPROC GetProcAddress(HMODULE,LPCSTR)”: 无法将参数 2 从“const wchar_t [26]”转换为“LPCSTR”
1>d:\05_study\mark-down-doc\17-vc++\demosource\nvtusbtool\nvtusbtool\nvtusbtool.cpp(29): note: 与指向的类型无关;强制转换要求 reinterpret_cast、C 样式强制转换或函数样式强制转换
1>d:\05_study\mark-down-doc\17-vc++\demosource\nvtusbtool\nvtusbtool\nvtusbtool.cpp(30): error C2664: “FARPROC GetProcAddress(HMODULE,LPCSTR)”: 无法将参数 2 从“const wchar_t [30]”转换为“LPCSTR”
1>d:\05_study\mark-down-doc\17-vc++\demosource\nvtusbtool\nvtusbtool\nvtusbtool.cpp(30): note: 与指向的类型无关;强制转换要求 reinterpret_cast、C 样式强制转换或函数样式强制转换
1>d:\05_study\mark-down-doc\17-vc++\demosource\nvtusbtool\nvtusbtool\nvtusbtool.cpp(31): error C2664: “FARPROC GetProcAddress(HMODULE,LPCSTR)”: 无法将参数 2 从“const wchar_t [22]”转换为“LPCSTR”
1>d:\05_study\mark-down-doc\17-vc++\demosource\nvtusbtool\nvtusbtool\nvtusbtool.cpp(31): note: 与指向的类型无关;强制转换要求 reinterpret_cast、C 样式强制转换或函数样式强制转换
1>d:\05_study\mark-down-doc\17-vc++\demosource\nvtusbtool\nvtusbtool\nvtusbtool.cpp(32): error C2664: “FARPROC GetProcAddress(HMODULE,LPCSTR)”: 无法将参数 2 从“const wchar_t [24]”转换为“LPCSTR”
1>d:\05_study\mark-down-doc\17-vc++\demosource\nvtusbtool\nvtusbtool\nvtusbtool.cpp(32): note: 与指向的类型无关;强制转换要求 reinterpret_cast、C 样式强制转换或函数样式强制转换
1>d:\05_study\mark-down-doc\17-vc++\demosource\nvtusbtool\nvtusbtool\nvtusbtool.cpp(33): error C2664: “FARPROC GetProcAddress(HMODULE,LPCSTR)”: 无法将参数 2 从“const wchar_t [24]”转换为“LPCSTR”
1>d:\05_study\mark-down-doc\17-vc++\demosource\nvtusbtool\nvtusbtool\nvtusbtool.cpp(33): note: 与指向的类型无关;强制转换要求 reinterpret_cast、C 样式强制转换或函数样式强制转换
1>d:\05_study\mark-down-doc\17-vc++\demosource\nvtusbtool\nvtusbtool\nvtusbtool.cpp(34): error C2664: “FARPROC GetProcAddress(HMODULE,LPCSTR)”: 无法将参数 2 从“const wchar_t [18]”转换为“LPCSTR”
1>d:\05_study\mark-down-doc\17-vc++\demosource\nvtusbtool\nvtusbtool\nvtusbtool.cpp(34): note: 与指向的类型无关;强制转换要求 reinterpret_cast、C 样式强制转换或函数样式强制转换
1>d:\05_study\mark-down-doc\17-vc++\demosource\nvtusbtool\nvtusbtool\nvtusbtool.cpp(35): error C2664: “FARPROC GetProcAddress(HMODULE,LPCSTR)”: 无法将参数 2 从“const wchar_t [17]”转换为“LPCSTR”
1>d:\05_study\mark-down-doc\17-vc++\demosource\nvtusbtool\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.做如下设置
编译时报错;1>------ 已启动生成: 项目: NvtUSBTool, 配置: Release Win32 ------ 1>NvtUSBTool.cpp 1>d:\05_study\mark-down-doc\17-vc++\demosource\nvtusbtool\nvtusbtool\nvtusbtool.cpp(19): error C2664: “HMODULE LoadLibraryA(LPCSTR)”: 无法将参数 1 从“const wchar_t [10]”转换为“LPCSTR” 1>d:\05_study\mark-down-doc\17-vc++\demosource\nvtusbtool\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;
}