使用 C++/CLR dll 时 C# 应用崩溃

本文关键字:应用 崩溃 dll C++ CLR 使用 | 更新日期: 2023-09-27 18:31:47

我有 3 个应用程序,一个是输出静态库的本机C++应用程序,一个是此静态库的 C++/CLR 包装器,最后是使用 C++/CLR 包装器的 C# Windows 窗体应用程序。

当项目为空时,一切都可以编译并运行良好,但是当我在本机C++应用程序中向我的类添加一些代码时,C# winforms应用程序中出现崩溃。

这是错误消息:

A first chance exception of type 'System.IO.FileNotFoundException' occurred in      
WindowsFormsApplication1.exe
An unhandled exception of type 'System.IO.FileNotFoundException' occurred in  
WindowsFormsApplication1.exe
Additional information: Could not load file or assembly 'stenCLR.dll' or one of its 
dependencies. The specified module could not be found.

我确定stenCLR.dll在正确的文件夹中。

这是来自视觉工作室的完整错误日志:

'WindowsFormsApplication1.exe': Loaded 'E:'ST Projects'sten_svn'trunk'WindowsFormsApplication1'bin'Debug'WindowsFormsApplication1.exe', No native symbols in symbol file.
'WindowsFormsApplication1.exe': Loaded 'C:'Windows'SysWOW64'ntdll.dll', Cannot find or open the PDB file.
'WindowsFormsApplication1.exe': Loaded 'C:'Windows'SysWOW64'mscoree.dll', Cannot find or open the PDB file.
'WindowsFormsApplication1.exe': Loaded 'C:'Windows'SysWOW64'kernel32.dll', Cannot find or open the PDB file.
'WindowsFormsApplication1.exe': Loaded 'C:'Windows'SysWOW64'KernelBase.dll', Cannot find or open the PDB file.
'WindowsFormsApplication1.exe': Loaded 'C:'Windows'SysWOW64'advapi32.dll', Cannot find or open the PDB file.
'WindowsFormsApplication1.exe': Loaded 'C:'Windows'SysWOW64'msvcrt.dll', Cannot find or open the PDB file.
'WindowsFormsApplication1.exe': Loaded 'C:'Windows'SysWOW64'sechost.dll', Cannot find or open the PDB file.
'WindowsFormsApplication1.exe': Loaded 'C:'Windows'SysWOW64'rpcrt4.dll', Cannot find or open the PDB file.
'WindowsFormsApplication1.exe': Loaded 'C:'Windows'SysWOW64'sspicli.dll', Cannot find or open the PDB file.
'WindowsFormsApplication1.exe': Loaded 'C:'Windows'SysWOW64'cryptbase.dll', Cannot find or open the PDB file.
'WindowsFormsApplication1.exe': Loaded 'C:'Windows'Microsoft.NET'Framework'v4.0.30319'mscoreei.dll', Cannot find or open the PDB file.
'WindowsFormsApplication1.exe': Loaded 'C:'Windows'SysWOW64'shlwapi.dll', Cannot find or open the PDB file.
'WindowsFormsApplication1.exe': Loaded 'C:'Windows'SysWOW64'gdi32.dll', Cannot find or open the PDB file.
'WindowsFormsApplication1.exe': Loaded 'C:'Windows'SysWOW64'user32.dll', Cannot find or open the PDB file.
'WindowsFormsApplication1.exe': Loaded 'C:'Windows'SysWOW64'lpk.dll', Cannot find or open the PDB file.
'WindowsFormsApplication1.exe': Loaded 'C:'Windows'SysWOW64'usp10.dll', Cannot find or open the PDB file.
'WindowsFormsApplication1.exe': Loaded 'C:'Windows'SysWOW64'imm32.dll', Cannot find or open the PDB file.
'WindowsFormsApplication1.exe': Loaded 'C:'Windows'SysWOW64'msctf.dll', Cannot find or open the PDB file.
'WindowsFormsApplication1.exe': Loaded 'C:'Windows'Microsoft.NET'Framework'v4.0.30319'clr.dll', Cannot find or open the PDB file.
'WindowsFormsApplication1.exe': Loaded 'C:'Windows'SysWOW64'msvcr110_clr0400.dll', Cannot find or open the PDB file.
'WindowsFormsApplication1.exe': Loaded 'C:'Windows'assembly'NativeImages_v4.0.30319_32'mscorlib'db19194dcf61188e0e1bb9b6b2dba362'mscorlib.ni.dll', Cannot find or open the PDB file.
'WindowsFormsApplication1.exe' (Managed (v4.0.30319)): Loaded 'C:'Windows'Microsoft.Net'assembly'GAC_32'mscorlib'v4.0_4.0.0.0__b77a5c561934e089'mscorlib.dll'
'WindowsFormsApplication1.exe': Loaded 'C:'Windows'SysWOW64'ole32.dll', Cannot find or open the PDB file.
'WindowsFormsApplication1.exe': Loaded 'C:'Windows'SysWOW64'uxtheme.dll', Cannot find or open the PDB file.
'WindowsFormsApplication1.exe': Loaded 'C:'Program Files (x86)'Common Files'microsoft shared'ink'tiptsf.dll', Cannot find or open the PDB file.
'WindowsFormsApplication1.exe': Loaded 'C:'Windows'SysWOW64'oleaut32.dll', Cannot find or open the PDB file.
'WindowsFormsApplication1.exe': Loaded 'C:'Windows'SysWOW64'version.dll', Cannot find or open the PDB file.
'WindowsFormsApplication1.exe' (Managed (v4.0.30319)): Loaded 'E:'ST Projects'sten_svn'trunk'WindowsFormsApplication1'bin'Debug'WindowsFormsApplication1.exe', Symbols loaded.
'WindowsFormsApplication1.exe': Loaded 'C:'Windows'Microsoft.NET'Framework'v4.0.30319'clrjit.dll', Cannot find or open the PDB file.
'WindowsFormsApplication1.exe': Loaded 'C:'Windows'assembly'NativeImages_v4.0.30319_32'System'529187426262f016595cb4b92bc83241'System.ni.dll', Cannot find or open the PDB file.
'WindowsFormsApplication1.exe': Loaded 'C:'Windows'assembly'NativeImages_v4.0.30319_32'System.Drawing'6007a55278ac4372ab91f08ead86756e'System.Drawing.ni.dll', Cannot find or open the PDB file.
'WindowsFormsApplication1.exe': Loaded 'C:'Windows'assembly'NativeImages_v4.0.30319_32'System.Windows.Forms'1242e9bc90b42762b6c7f2a5052a2280'System.Windows.Forms.ni.dll', Cannot find or open the PDB file.
'WindowsFormsApplication1.exe' (Managed (v4.0.30319)): Loaded 'C:'Windows'Microsoft.Net'assembly'GAC_MSIL'System.Windows.Forms'v4.0_4.0.0.0__b77a5c561934e089'System.Windows.Forms.dll'
'WindowsFormsApplication1.exe' (Managed (v4.0.30319)): Loaded 'C:'Windows'Microsoft.Net'assembly'GAC_MSIL'System.Drawing'v4.0_4.0.0.0__b03f5f7f11d50a3a'System.Drawing.dll'
'WindowsFormsApplication1.exe' (Managed (v4.0.30319)): Loaded 'C:'Windows'Microsoft.Net'assembly'GAC_MSIL'System'v4.0_4.0.0.0__b77a5c561934e089'System.dll'
'WindowsFormsApplication1.exe': Loaded 'ImageAtBase0x50d00000', Loading disabled by Include/Exclude setting.
'WindowsFormsApplication1.exe': Unloaded 'ImageAtBase0x50d00000'
'WindowsFormsApplication1.exe': Loaded 'ImageAtBase0x519b0000', Loading disabled by Include/Exclude setting.
'WindowsFormsApplication1.exe': Loaded 'ImageAtBase0x7f0000', Loading disabled by Include/Exclude setting.
'WindowsFormsApplication1.exe': Unloaded 'ImageAtBase0x519b0000'
'WindowsFormsApplication1.exe': Loaded 'C:'Windows'SysWOW64'cryptsp.dll', Cannot find or open the PDB file.
'WindowsFormsApplication1.exe': Loaded 'C:'Windows'SysWOW64'rsaenh.dll', Cannot find or open the PDB file.
'WindowsFormsApplication1.exe': Loaded 'C:'Windows'SysWOW64'RpcRtRemote.dll', Cannot find or open the PDB file.
'WindowsFormsApplication1.exe': Loaded 'E:'ST Projects'sten_svn'trunk'WindowsFormsApplication1'bin'Debug'stenCLR.dll', Symbols loaded.
'WindowsFormsApplication1.exe': Loaded 'C:'Windows'SysWOW64'msvcr110d.dll', Symbols loaded.
'WindowsFormsApplication1.exe': Loaded 'C:'Windows'SysWOW64'msvcp110d.dll', Symbols loaded.
'WindowsFormsApplication1.exe': Loaded 'C:'Windows'SysWOW64'd3d11.dll', Cannot find or open the PDB file.
'WindowsFormsApplication1.exe': Loaded 'C:'Windows'SysWOW64'dxgi.dll', Cannot find or open the PDB file.
'WindowsFormsApplication1.exe': Loaded 'C:'Windows'SysWOW64'dwmapi.dll', Cannot find or open the PDB file.
'WindowsFormsApplication1.exe': Unloaded 'E:'ST Projects'sten_svn'trunk'WindowsFormsApplication1'bin'Debug'stenCLR.dll'
'WindowsFormsApplication1.exe': Unloaded 'C:'Windows'SysWOW64'd3d11.dll'
'WindowsFormsApplication1.exe': Unloaded 'C:'Windows'SysWOW64'dxgi.dll'
'WindowsFormsApplication1.exe': Unloaded 'C:'Windows'SysWOW64'dwmapi.dll'
'WindowsFormsApplication1.exe': Unloaded 'C:'Windows'SysWOW64'msvcp110d.dll'
'WindowsFormsApplication1.exe': Unloaded 'C:'Windows'SysWOW64'msvcr110d.dll'
First-chance exception at 0x753eb9bc in WindowsFormsApplication1.exe: Microsoft C++ exception: EEFileLoadException at memory location 0x003bcce4.
First-chance exception at 0x753eb9bc in WindowsFormsApplication1.exe: Microsoft C++ exception: [rethrow] at memory location 0x00000000.
First-chance exception at 0x753eb9bc in WindowsFormsApplication1.exe: Microsoft C++ exception: [rethrow] at memory location 0x00000000.
First-chance exception at 0x753eb9bc in WindowsFormsApplication1.exe: Microsoft C++ exception: [rethrow] at memory location 0x00000000.
First-chance exception at 0x753eb9bc in WindowsFormsApplication1.exe: Microsoft C++ exception: [rethrow] at memory location 0x00000000.
First-chance exception at 0x753eb9bc in WindowsFormsApplication1.exe: Microsoft C++ exception: [rethrow] at memory location 0x00000000.
A first chance exception of type 'System.IO.FileNotFoundException' occurred in WindowsFormsApplication1.exe
An unhandled exception of type 'System.IO.FileNotFoundException' occurred in WindowsFormsApplication1.exe
Additional information: Could not load file or assembly 'stenCLR.dll' or one of its dependencies. The specified module could not be found.
The program '[2000] WindowsFormsApplication1.exe: Native' has exited with code 0 (0x0).
The program '[2000] WindowsFormsApplication1.exe: Managed (v4.0.30319)' has exited with code 0 (0x0).

使用 C++/CLR dll 时 C# 应用崩溃

我建议看看Dependency Walker和Fusion Log Viewer。

依赖关系Walker会告诉你是否有任何DLL丢失你尝试加载的DLL。

Fusion Log Viewer 将告诉您尝试从何处加载 DLL。

这些通常是调试库加载问题的最简单方法,因为它们使问题非常明显:)

一种可能性是你有一台 64 位机器,编译了 C# 应用程序为"任何 CPU"或 64 位,并且 c++ 本机库或 C++/CLI 是 32 位。在这种情况下,系统查找 64 位库。

确保所有应用程序都是针对相同的体系结构(x86 或 x64)构建的。