2013-05-28 26 views
7

C# exe içinde aramak istediğim bir yönetilmeyen C++ DLL var. Olası çözümlere baktım ve bana yapılacak en iyi şey, C++/CLI'yi yönetilmeyen C++ sınıfı için bir sarıcı olarak kullanmak gibi görünüyor. Bu şekilde görünen bir C++/CLI sınıfı yazdım ve bir DLL'ye derlendim (bunun bir yok edici ve bir finalleştirici olması gerektiğini biliyorum, ancak kod ana işlev içine girmeyecek, basitlik iyiliği):EEFileLoadException Yönetilen DLL'de C++ DLL Yüklenirken

#include <cppheader.h> 

using namespace System; 

namespace DependencyInterface 
{ 
    public ref class DependencyTester 
    { 
    public: 
    DependencyTester() 
    { 
     _class = new CPPClass(); 
    } 

    private: 
    CPPClass* _class; 
    }; 
} 

sonra şöyle bir C# yürütülebilir vardır:

First-chance exception at 0x000007fefd5a9e5d in DependencyTest2.exe: Microsoft C++ exception: EEFileLoadException * __ptr64 at memory location 0x0094ca58.. 
: Ben çalıştığınızda,

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; 
     } 
    } 
} 

Maalesef ve kod çalıştırmasına, aşağıdaki C++ istisna olsun

Belirlemeye çalıştım Ana'nın ilk satırında bir kesme noktası, ancak yürütme bu noktaya ulaşmadan önce istisna atılır.

First-chance exception at 0x76d8c5e2 in DependencyTest2.exe: 0xC0000005: Access violation reading location 0x0000000000000020. 

kimse herhangi bir tavsiye var mı: Ben vurursanız ben bu olsun (Ben MVS 2010 kullanıyorum) "devam"? Bu Windows 7 x64 üzerinde ve her şey, C++ DLL dahil olmak üzere x64 için derlenmiştir.

+1

Aramak için yığın izini görmem gerekiyor. Ancak öncelikle yönetilen kipte hata ayıklayıcınızı değiştirin, böylece gerçek yönetilen istisnaları görebilirsiniz. –

cevap

6

Bir EEFileLoadException, yürütülebilir dosyanın bağımlılıklarından birini bulamadığını veya yükleyemediğini gösterir. Bu elbette farklı sebeplere (yol problemi, karıştırma konfigürasyonları, karıştırma platformları) sahip olabilir.

İyi bir başlangıç, DLL'lerinizdeki/yürütülebilir dosyalarınızda Bağımlılık Walker'ı (x64 sürümünü kullandığınızdan emin olun) kullanıyor.

+0

Whoo, bu sonsuza dek sürdü! Evet, problem benim C++ kütüphanemde bulunan bazı kütüphanelerle ilgiliydi. –

1

C# projesinde bir dll'ye başvurduğum ve dll'nin kendisinin çözümümde yer almadığım diğer bazı DLL'lere bağımlı olduğunu gösteren benzer bir sorun yaşadım. Çözümümdeki eksik disklere referans ekledikten sonra sorun çözüldü. Alternatif olarak, eksik DLL'leri doğrudan uygulama dizinine kopyalayabilirsiniz. Bağımlılık kullanma Walker, eksik dekanların isimlerini göstermedikleri için yardımcı olmadı.

İlgili konular