DLL — C ++ Loadlibrary () ошибка 3765269347

Я получил эту ошибку Loadlibraty () 3765269347, беспокоит меня. Я реализую консольное приложение C ++, построенное как x64, чтобы загрузить родную C ++ dll для x64. Ниже приведен код в консольном приложении C ++ для загрузки библиотеки DLL:

  bool InitDll()
{
HINSTANCE hInst = LoadLibrary(_T("C:\\TIS_Nick\\Hardware\\Devices\\ThorDetectorSwitch\\TDSTest\\TDSTest\\Debug\\Modules_Native\\ThorDetectorSwitch.dll"));
if( hInst != NULL )
{
FreeLibrary( hInst );
return true;
}
else
{
DWORD err = GetLastError();
return false;
}
}

Я получил ошибку 3765269347, что, я думаю, означает, что C ++ не может обработать эту ошибку. Я уверен, что мой путь для загрузки DLL является правильным.

Я также использую Контролировать процесс проследить, как будут вызываться dll и функции. и вот информация, которую я считаю актуальной.

11:08:07.3196483 AM TDSTest.exe 1604    QueryNameInformationFile    C:\TIS_Nick\Hardware\Devices\ThorDetectorSwitch\TDSTest\TDSTest\x64\Debug\TDSTest.exe   SUCCESS Name: \TIS_Nick\Hardware\Devices\ThorDetectorSwitch\TDSTest\TDSTest\x64\Debug\TDSTest.exe
11:08:08.5720585 AM TDSTest.exe 1604    CreateFile  C:\TIS_Nick\Hardware\Devices\ThorDetectorSwitch\TDSTest\TDSTest\Debug\Modules_Native\ThorDetectorSwitch.dll SUCCESS Desired Access: Read Attributes, Disposition: Open, Options: Open Reparse Point, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened
11:08:08.5721041 AM TDSTest.exe 1604    QueryBasicInformationFile   C:\TIS_Nick\Hardware\Devices\ThorDetectorSwitch\TDSTest\TDSTest\Debug\Modules_Native\ThorDetectorSwitch.dll SUCCESS CreationTime: 6/11/2013 6:30:08 PM, LastAccessTime: 6/11/2013 6:30:08 PM, LastWriteTime: 6/12/2013 11:00:28 AM, ChangeTime: 6/12/2013 11:05:51 AM, FileAttributes: A
11:08:08.5721293 AM TDSTest.exe 1604    CloseFile   C:\TIS_Nick\Hardware\Devices\ThorDetectorSwitch\TDSTest\TDSTest\Debug\Modules_Native\ThorDetectorSwitch.dll SUCCESS
11:08:08.5722797 AM TDSTest.exe 1604    CreateFile  C:\TIS_Nick\Hardware\Devices\ThorDetectorSwitch\TDSTest\TDSTest\Debug\Modules_Native\ThorDetectorSwitch.dll SUCCESS Desired Access: Read Data/List Directory, Execute/Traverse, Synchronize, Disposition: Open, Options: Synchronous IO Non-Alert, Non-Directory File, Attributes: n/a, ShareMode: Read, Delete, AllocationSize: n/a, OpenResult: Opened
11:08:08.5723228 AM TDSTest.exe 1604    CreateFileMapping   C:\TIS_Nick\Hardware\Devices\ThorDetectorSwitch\TDSTest\TDSTest\Debug\Modules_Native\ThorDetectorSwitch.dll FILE LOCKED WITH ONLY READERS   SyncType: SyncTypeCreateSection, PageProtection:
11:08:08.5724896 AM TDSTest.exe 1604    CreateFileMapping   C:\TIS_Nick\Hardware\Devices\ThorDetectorSwitch\TDSTest\TDSTest\Debug\Modules_Native\ThorDetectorSwitch.dll SUCCESS SyncType: SyncTypeOther
11:08:08.5725861 AM TDSTest.exe 1604    Load Image  C:\TIS_Nick\Hardware\Devices\ThorDetectorSwitch\TDSTest\TDSTest\Debug\Modules_Native\ThorDetectorSwitch.dll SUCCESS Image Base: 0x7fef7830000, Image Size: 0x6d000
11:08:08.5726385 AM TDSTest.exe 1604    QueryNameInformationFile    C:\TIS_Nick\Hardware\Devices\ThorDetectorSwitch\TDSTest\TDSTest\Debug\Modules_Native\ThorDetectorSwitch.dll SUCCESS Name: \TIS_Nick\Hardware\Devices\ThorDetectorSwitch\TDSTest\TDSTest\Debug\Modules_Native\ThorDetectorSwitch.dll
11:08:08.5728910 AM TDSTest.exe 1604    CreateFile  C:\TIS_Nick\Hardware\Devices\ThorDetectorSwitch\TDSTest\TDSTest\Debug\Modules_Native\ThorDetectorSwitch.dll SUCCESS Desired Access: Generic Read, Disposition: Open, Options: Synchronous IO Non-Alert, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened
11:08:08.5912215 AM TDSTest.exe 1604    CloseFile   C:\TIS_Nick\Hardware\Devices\ThorDetectorSwitch\TDSTest\TDSTest\Debug\Modules_Native\ThorDetectorSwitch.dll SUCCESS

Я извиняюсь, что это выглядит немного грязно, я пытался опубликовать здесь фотографию, но оказалось, что у меня недостаточно репутации, чтобы сделать это.
Любое предложение приветствуется.

Обновить
Я проследил до конструктора в ThorDetectorSwitch.dll, который выглядит следующим образом:

ThorDetectorSwitch::ThorDetectorSwitch() : _mcSwitch(__uuidof(MCLControlClass))
{
_A  = WstringToBSTR(L"A");
_B  = WstringToBSTR(L"B");
_C  = WstringToBSTR(L"C");
_D  = WstringToBSTR(L"D");

_deviceDetected = FALSE;
}

Я устанавливаю точку останова в первой скобке, но она никогда не попадает в функцию. Вместо этого он переходит к исключениям. Я полагаю, что-то не так с MCLControlClass, или же_mcSwitch?

2

Решение

Я получил ошибку 3765269347

Общая стратегия с большими значениями числа ошибок, как это, заключается в преобразовании их в шестнадцатеричное. 3765269347 == 0xE06D7363. Это магическое число, тоже хорошо гуглится. Одна из стратегий, используемая программистами Microsoft, состоит в том, чтобы сделать последние 3 байта кода исключения ASCII-кодами. 6D7363 == «мск». Недостаточно места для добавления ++ 🙂

Диагностика заключается в том, что функция DllMain () внутри DLL умерла из-за необработанного исключения C ++. Это случается, конечно.

Способ отладки состоит в том, чтобы принудительно остановить отладчик при возникновении исключения, прежде чем загрузчик Windows сможет его перехватить и превратить в код ошибки. В Visual Studio используйте Debug + Exceptions, отметьте флажок Thrown для исключений C ++.

Понимание того, что вы видите, когда отладчик останавливается, во многом зависит от того, есть ли у вас хороший файл PDB для DLL и есть ли у вас исходный код. Источник, как правило, обычно требуется для решения проблемы. Если у вас нет доступа к чему-либо подобному, вам нужна помощь программиста, написавшего эту DLL. Пошлите ему небольшой репроект, который воспроизводит аварию.

7

Другие решения

Это особенное исключение. Пожалуйста, прочитайте это от MS:
Расшифровка параметров сгенерированного исключения C ++ (0xE06D7363)

4

По вопросам рекламы [email protected]