![](/img/trans.png)
[英]C# exception thrown from a C++ managed dll - EEFileLoadException * __ptr64
[英]EEFileLoadException When Loading C++ DLL in Managed DLL
我有一個非托管的C ++ DLL,我想從C#exe中調用它。 我查看了可能的解決方案,在我看來,最好的辦法是使用C ++ / CLI作為非托管C ++類的包裝器。 所以我寫了一個看起來像這樣的C ++ / CLI類,並編譯成一個DLL(我知道它應該有一個析構函數和一個終結器,但到目前為止,代碼不會進入Main函數,所以我將它們排除在外簡單的緣故):
#include <cppheader.h>
using namespace System;
namespace DependencyInterface
{
public ref class DependencyTester
{
public:
DependencyTester()
{
_class = new CPPClass();
}
private:
CPPClass* _class;
};
}
然后我有一個C#可執行文件,如下所示:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DependencyInterface;
namespace DependencyTest2
{
class Program
{
static void Main(string[] args)
{
DependencyTester tester;
}
}
}
不幸的是,當我嘗試運行代碼時,我得到以下C ++異常:
First-chance exception at 0x000007fefd5a9e5d in DependencyTest2.exe: Microsoft C++ exception: EEFileLoadException * __ptr64 at memory location 0x0094ca58..
我試圖在Main的第一行設置斷點,但在執行到達該點之前拋出異常。 如果我點擊“繼續”(我正在使用MVS 2010),我會得到:
First-chance exception at 0x76d8c5e2 in DependencyTest2.exe: 0xC0000005: Access violation reading location 0x0000000000000020.
有人有建議嗎? 這是在Windows 7 x64上,並且已經為x64編譯了所有內容,包括C ++ DLL。
EEFileLoadException指示可執行文件無法找到或加載其中一個依賴項。 這當然可以有不同的原因(路徑問題,混合配置,混合平台)。
一個好的開始是在你的DLL /可執行文件上使用Dependency Walker(確保使用x64版本)。
我有一個類似的問題,我在C#項目中引用了一個dll,引用的dll本身依賴於我在解決方案中沒有包含的其他一些dll。 在我的解決方案中添加對缺少的dll的引用之后,問題得以解決。 或者,您可以將缺少的dll直接復制到應用程序目錄。 使用Dependency Walker沒有幫助,因為他們沒有顯示丟失的dll的名稱。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.