2011-10-13 2 views
1

/CLR 플래그를 사용하여 컴파일 된 오래된 네이티브 MFC/C++ dll이 있습니다. 이제 관리되는 C++/CLI 클래스를 namaspace 내의 dll에 추가했습니다./CLR 플래그로 관리되는 클래스가 포함 된 기본 DLL

헤더 파일은 아래에 있으며 cpp 파일에는 헤더 파일에 #include 만 있습니다. 네이티브 dll은 관리되지 않는 코드가 많은 거대한 dll 프로젝트이지만 아래와 같이 하나의 관리되는 C++ 클래스 만 있습니다.

나는 개체 브라우저에서 해당 네임 스페이스/클래스를 참조하지 않는 닷넷 윈폼 프로젝트에 대한 참조로 그 DLL을 추가 할 때

내가 네임 스페이스 "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을 추가하고 실행하면

은 내가

System.BadImageFormatException를 얻을. 어떤 단서?

그러나 나는 클래스와 이름 공간을보고 winform 프로젝트는 위의 문제와 달리 괜찮습니다.

+1

이렇게하면됩니다. 어쩌면 코드를 보여줘야할까요? 또는 반사경을 사용하여 dll의 내용을 확인하십시오. – cdleonard

답변

1

System.BadImageFormatException은 일반적으로 AnyCPU .NET 응용 프로그램 참조가 32 비트 네이티브 코드가 포함 된 DLL로 인해 발생합니다. AnyCPU 응용 프로그램이 64 비트로 실행되고 DLL을로드 할 수 없기 때문에 64 비트 플랫폼에서 실행할 때 오류가 발생합니다. 이 문제를 해결하기 위해 응용 프로그램을 x86 전용으로 표시하거나 네이티브 코드가 포함 된 모든 DLL의 32 비트 및 64 비트 버전을 제공하도록 (쉽게) 표시합니다.

물론 다른 문제가있을 수 있습니다. 코멘트에서 @cdleonard가 제안한 것처럼 Red Gate Reflector로 DLL을 확인하는 것은 멋진 다음 단계입니다. 또는 ILSpy, 무료입니다.

+0

고마워. 내 문제 였어 .net 응용 프로그램을 x86에 강제로 설치하고 문제가 없어졌다. – coolshashi

관련 문제