Ho una DLL C++ non gestita che vorrei richiamare da un exe C#. Ho esaminato le possibili soluzioni e mi sembra che la cosa migliore da fare sia usare C++/CLI come wrapper per la classe C++ non gestita. Così ho scritto una classe C++/CLI che assomiglia a questo, e viene compilata in una DLL (so che dovrebbe avere un distruttore e un finalizzatore, ma finora il codice non entrerà nella funzione Main, quindi li ho esclusi per ragioni di semplicità):EEFileLoadException durante il caricamento di DLL C++ nella DLL gestita
#include <cppheader.h>
using namespace System;
namespace DependencyInterface
{
public ref class DependencyTester
{
public:
DependencyTester()
{
_class = new CPPClass();
}
private:
CPPClass* _class;
};
}
ho poi hanno un C# eseguibile che assomiglia a questo:
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;
}
}
}
Purtroppo, quando cerco di eseguire il codice, ottengo il seguente C un'eccezione ++:
First-chance exception at 0x000007fefd5a9e5d in DependencyTest2.exe: Microsoft C++ exception: EEFileLoadException * __ptr64 at memory location 0x0094ca58..
Ho provato a impostare un punto di interruzione sulla prima riga di Main, ma l'eccezione viene lanciata prima che l'esecuzione raggiunga quel punto. Se mi ha colpito "continua" (sto usando MVS 2010) ottengo questo:
First-chance exception at 0x76d8c5e2 in DependencyTest2.exe: 0xC0000005: Access violation reading location 0x0000000000000020.
Qualcuno ha qualche consiglio? Questo è su Windows 7 x64, e tutto è stato compilato per x64 inclusa la DLL C++.
Ho bisogno di vedere la traccia dello stack per effettuare la chiamata. Ma prima sposta il debugger in modalità gestita in modo da poter visualizzare le eccezioni gestite effettive. –