C++ C++;Loadlibrary()错误3765269347

C++ C++;Loadlibrary()错误3765269347,c++,dll,loadlibrary,C++,Dll,Loadlibrary,我有一个loadLibrary()错误3765269347困扰着我。我正在实现一个C++控制台应用程序,它构建为X64,用于加载X64本机C++ DLL。下面是C++控制台应用程序中加载DLL的代码: bool InitDll() { HINSTANCE hInst = LoadLibrary(_T("C:\\TIS_Nick\\Hardware\\Devices\\ThorDetectorSwitch\\TDSTest\\TDSTest\\Debug\\Modules_Native

我有一个loadLibrary()错误3765269347困扰着我。我正在实现一个C++控制台应用程序,它构建为X64,用于加载X64本机C++ DLL。下面是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
\u mcSwitch

这是一个特殊的执行选项。请阅读以下内容:

我得到的错误是3765269347

对于这样的大错误数值,一般策略是将它们转换为十六进制。3765269347==0xE06D7363。这是一个神奇的数字,谷歌也一样。Microsoft程序员使用的一种策略是将异常代码的最后3个字节设为ASCII码。6D7363==“msc”。空间不足,无法添加++:)

诊断是DLL内部的DLLIN()函数由于未处理的C++异常而死亡。这当然会发生

调试它的方法是在抛出异常时强制调试器停止,然后OS加载程序才能捕获它并将其转换为故障代码。在VisualStudio中,使用Debug >异常,勾选C++异常的已提交复选框。


当调试器停止时,了解您看到的内容在很大程度上取决于您是否有一个适合DLL的PDB文件以及是否有源代码。当然,修复问题通常需要源代码。如果您无法访问类似的内容,那么您确实需要编写该DLL的程序员的帮助。向他发送一个复制崩溃的小复制项目。

如何打印错误代码?不要对错误做任何假设,而是查看文档。获取未定义的错误(该代码)通常意味着库抛出了未处理的异常。调试时,输出窗口中没有任何内容吗?(假设此处为visual studio)您是否100%确定您的路径正确?在代码中显示的加载.dll文件的路径是
C:\TDSTest\Debug\ThorDetectorSwitch.dll
,然而,您发送到.dll文件的日志中显示的路径是
C:\TIS\u Nick\Hardware\Devices\ThorDetectorSwitch\TDSTest\TDSTest\Debug\Modules\u Native\ThorDetectorSwitch.dll
。这与您的问题非常相似:我不太了解调试部分。“在抛出异常时强制调试器停止”,我该怎么做?在Loadlibrary()上设置一个断点,然后在dllmain.cpp中的某个位置设置另一个断点?查看窗口顶部的菜单。单击调试。单击例外。将打开一个对话框。勾选抛出复选框。我明白了。现在我可以进入我的dll,所以我想我应该从那里开始。谢谢。