Я получаю доступ к dll-библиотеке С++ (у меня нет исходного кода) из кода С++. Я использую эту библиотеку для монтирования USB-устройства, чтобы иметь доступ к файлам на устройстве. Этот код хорошо работал в VS2010, но после обновления до VS2013 он больше не работает. Вот мой вопрос. Какие различия между VS2010 и VS2013 могут привести к сбою или какие настройки могут привести к сбою?
Вот что я наблюдаю при запуске кода:
- Вызов LoadLibary возвращает дескриптор модуля
- GetProcAddress, кажется, возвращает действительный адрес процедуры
- Вызов dyn_Open_Device всегда возвращает false с VS2013, он почти всегда возвращает true в VS2010.
- После вызова 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
dyn_Open_Device();
возвращаетERROR_FILE_NOT_FOUND
, что означает, что устройство не найдено. все - person RbMm   schedule 18.01.2018