我有一个非托管 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。