EEFileLoadException Lors du Chargement de DLL C++ dans la gestion des DLL
J'ai une C++ DLL que je voudrais appeler à partir de l'intérieur d'un C# exe. J'ai regardé dans les solutions possibles, et il me semble que la meilleure chose à faire est d'utiliser le C++/CLI comme un wrapper pour le C++ de la classe. J'ai donc écrit en C++/CLI classe qui ressemble à cela, et est compilé dans une DLL (je sais qu'il doit avoir un destructeur et un outil de finalisation, mais jusqu'à présent, le code ne sera pas obtenir dans la fonction Principale, donc j'exclus pour des raisons de simplicité):
#include <cppheader.h>
using namespace System;
namespace DependencyInterface
{
public ref class DependencyTester
{
public:
DependencyTester()
{
_class = new CPPClass();
}
private:
CPPClass* _class;
};
}
Je puis avoir un C# exécutable qui ressemble à ceci:
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;
}
}
}
Malheureusement, lorsque j'essaie d'exécuter le code, j'ai le C++ exception:
First-chance exception at 0x000007fefd5a9e5d in DependencyTest2.exe: Microsoft C++ exception: EEFileLoadException * __ptr64 at memory location 0x0094ca58..
J'ai essayé de définir un point d'arrêt sur la première ligne de la Main, mais l'exception est levée avant l'exécution atteint ce point. Si je frappe "continuer" (je suis en utilisant MVS 2010), je reçois ceci:
First-chance exception at 0x76d8c5e2 in DependencyTest2.exe: 0xC0000005: Access violation reading location 0x0000000000000020.
Quelqu'un aurait-il des conseils? C'est sur Windows 7 x64, et tout a été compilé pour x64, y compris la DLL C++.
OriginalL'auteur | 2013-05-28
Vous devez vous connecter pour publier un commentaire.
Un EEFileLoadException indique l'exécutable impossible de trouver ou charger un de ses dépendances. Qui peut, bien sûr, a des causes différentes (problème de chemin d'accès, le mixage des configurations, mélange de plates-formes).
Un bon départ, c'est à l'aide de Dependency Walker (assurez-vous d'utiliser la version 64 bits) sur votre DLL/exécutables.
OriginalL'auteur stijn
J'ai eu un problème similaire où je faisait référence à une dll en C# le projet et qui se réfèrent à la dll elle-même dû à la dépendance de certains autres dll qui je n'ai pas inclus dans ma solution. Le problème a été résolu après que j'ai ajouté la référence à la dll manquantes dans ma solution. Alternativement, vous pouvez copier les dll manquantes directement au répertoire de l'application. À l'aide de Dependency Walker n'a pas aidé, car ils n'avaient pas d'afficher le nom de la dll manquantes.
OriginalL'auteur Patel