gpt4 book ai didi

c# - 在托管 DLL 中加载 C++ DLL 时出现 EEFileLoadException

转载 作者:可可西里 更新时间:2023-11-01 17:41:32 31 4
gpt4 key购买 nike

我有一个非托管 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 中加载 C++ DLL 时出现 EEFileLoadException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16796335/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com