我正在从 c++ 代码访问一个 c++ dll 库(我没有源代码)。我使用这个库来挂载一个 USB 设备,这样我就可以访问设备上的文件。此代码在 VS2010 中运行良好,但自从我们更新到 VS2013 后,它不再运行。这是我的问题。VS2010 和 VS2013 之间的哪些差异可能导致此失败或哪些设置可能导致此失败?
这是我在运行代码时观察到的:
- LoadLibary 调用返回一个模块句柄
- GetProcAddress 似乎返回了一个有效的过程地址
- 在 VS2013 中调用 dyn_Open_Device 总是返回 false,在 VS2010 中几乎总是返回 true。
- 调用 dyn_Open_Device 后,GetLastError 返回 2 (ERROR_FILE_NOT_FOUND)
这是代码:
typedef bool(*PFUNC_Open_Device)();
DWORD dwError = GetLastError();
BOOL bSuccess = SetDllDirectory(_T("C:\\Users\\steve epp\\Desktop\\EH16\\sdk1.1\\lib\\"));
// Step 2: Dynamically load the dll
HMODULE m_hModule = LoadLibrary("eeyelog_protocol_v1.0.dll");
dwError = GetLastError();
// Handle the case that the dll is not found
if (m_hModule == NULL)
{
dwError = GetLastError();
if (dwError == ERROR_MOD_NOT_FOUND)
{
CString msg = "Unable to load eeyelog_protocol_v1.0.dll.";
AfxMessageBox(msg, MB_OK | MB_ICONEXCLAMATION);
}
}
PFUNC_Open_Device dyn_Open_Device = (PFUNC_Open_Device)GetProcAddress(m_hModule, "Open_Device");
dwError = GetLastError();
bool ret = dyn_Open_Device();
dwError = GetLastError();
这是 DUMPBIN 结果:
DUMPBIN /EXPORTS "C:\Users\steve epp\Desktop\EH16\sdk1.1\lib\eeyelog_protocol_v1.0.dll"
Microsoft (R) COFF/PE Dumper Version 10.00.40219.01
Copyright (C) Microsoft Corporation. All rights reserved.
Dump of file C:\Users\steve epp\Desktop\EH16\sdk1.1\lib\eeyelog_protocol_v1.0.dll
File Type: DLL
Section contains the following exports for eeyelog_protocol_v1.0.dll
00000000 characteristics
59CC4F90 time date stamp Wed Sep 27 18:25:36 2017
0.00 version
1 ordinal base
33 number of functions
33 number of names
ordinal hint RVA name
1 0 000010A0 Check_Device_state
2 1 000011D0 Close_Device
3 2 000012E0 Login
4 3 000011A0 Open_Device