У меня есть неуправляемая C++ DLL, с которой я бы хотел позвонить из C# exe. Я рассмотрел возможные решения, и мне кажется, что лучше всего использовать C++/CLI в качестве оболочки для неуправляемого класса C++. Поэтому я написал класс C++/CLI, который выглядит так и компилируется в DLL (я знаю, что он должен иметь деструктор и финализатор, но до сих пор код не попадает в главную функцию, поэтому я исключил их для ради простоты):EEFileLoadException при загрузке DLL на C++ в управляемой DLL
#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.
Мне нужно увидеть трассировку стека, чтобы позвонить. Но сначала переключите свой отладчик в управляемый режим, чтобы вы могли видеть фактическое управляемое исключение (исключения). –