2011-10-13 31 views
1

我有一個老的本地MFC/C++ dll我設法使用/ CLR標誌來編譯它。 現在我已經將託管的C++/CLI類添加到了namaspace中的dll。使用/ CLR標誌構建的本地dll包含一個託管類

頭文件在下面,而cpp文件只有頭文件的#include。 原生dll是一個巨大的dll項目,有很多未託管的代碼,但它只有一個託管的C++類,如下所示。

當我添加DLL作爲一個.NET的WinForms項目的引用我沒有看到該命名空間/類,在對象瀏覽器,

,我得到編譯錯誤沒有找到命名空間「ShashiTest」

我使用Visual Studio在混合模式下2008

機DLL不能被添加作爲參照管理的項目?

還是我缺少的東西

請幫忙。

#pragma once 
#using<mscorlib.dll> 
#using<system.windows.forms.dll> 
// Class derived from Forms 

using namespace System::Windows::Forms; 
using namespace System; 
using namespace System::ComponentModel; 
using namespace System::Collections; 
using namespace System::Diagnostics; 
using namespace System::Windows::Forms; 

namespace ShashiTest { 
/// <summary> 
/// Summary for test 
/// </summary> 
    public ref class test 
    { 
    public: 
    test(void) 
    { 

    }; 
    void ShowMessage() 
    { 
     MessageBox::Show("Hello World"); 
    } 
    }; 
} 

當我簡化我problem..I創建一個新的MFC DLL,並添加了manged C++類到它(同一類如上)。用/ CLR標誌編譯。

當我添加此DLL的WinForms項目並運行它,我得到

System.BadImageFormatException。任何線索?

但是,我看到類和名稱空間和winform項目編譯很好,不像我有上述問題。

+1

這應該工作。也許你應該顯示一些代碼?或者使用反射器來檢查你的dll的內容。 – cdleonard

回答

1

System.BadImageFormatException通常是由於有一個AnyCPU .NET應用程序引用一個包含32位本機代碼的DLL引起的。在64位平臺上運行時出現錯誤,因爲AnyCPU應用程序以64位形式運行,並且無法加載DLL。對此的修復是(容易)將應用程序標記爲僅x86或(硬)提供包含本機代碼的所有DLL的32位和64位版本。

當然,你可能有其他一些問題。按照@cdleonard在註釋中建議的方式使用紅色門反射器檢查您的DLL是非常好的下一步。或者ILSpy,這是免費的。

+0

謝謝這是我的問題,我強迫我的.net應用程序到x86和問題消失。 – coolshashi

相關問題