2013-11-29 2 views
0

잠시 검색 한 후에도 명확한 대답을 찾을 수 없습니다. 드문 문제인 것 같습니다 :네이티브 및 관리되는 응용 프로그램에서 사용할 수있는 DLL 만들기

DLL에 있어야하는 기본 구현이 있습니다. 이 DLL은 네이티브 응용 프로그램과 관리 응용 프로그램 모두에서 사용할 수 있어야합니다. 나는 C++/CLI에서이 DLL을 작성하는 경우

그래서 나는 두 가지를 노출 수 :

  1. 네이티브 응용 프로그램에서 사용할 수있는 기능의 평면, C 스타일의 수출 인터페이스를 제공합니다. 이 DLL

이 작품은 윌을 참조하여 모든 관리 응용 프로그램 (예를 들어, C#을)에서 사용할 수 있습니다

  • 관리 클래스? 순전히 네이티브 응용 프로그램이이 DLL을로드하고 노출 된 함수를 호출 할 수 있습니까?

  • +1

    예,이 C++/CLI가 존재하는 이유 중 하나입니다 - 전혀 "드문"아니다, 우리는 모든 시간을 . [MSDN은 매우 명확하다] (http://msdn.microsoft.com/en-us/library/x0w2664k.aspx) –

    +1

    COM 구성 요소는 네이티브 코드와 관리 코드에서 호출 할 수 있습니다. 그것은 또 다른 대안입니다. – MSalters

    +0

    이것이 작동하지 않는 것으로 판명 된 것처럼./MT 스위치를 사용하여 DLL을 컴파일해야합니다 (연결하려는 Lib 중 하나 일 가능성이 있습니다.). 하지만 다음/clr 함께 컴파일 할 수 없습니다 (/ MT 및/clr 함께 작동하지 않는, 링커 말합니다 ...) 아! – Boris

    답변

    0

    기본 DLL은 일반 기본 DLL (/ clr 없음)처럼 컴파일됩니다. 호출 C++/CLI 응용 프로그램/DLL은 C++ 클래스를 사용하여 LoadLibrary 및 GetProcAdress를 통해 DLL을로드합니다. 위의 C++ 클래스는 네이티브 DLL의 모든 기능을 매핑해야합니다. 프록시 클래스로서 은 C++ 클래스의 역할 :

    예 :

    네이티브 DLL의 하사 기능 foo().

    C++/CLI 코드처럼 보이는 방법 foo에 노출 :

    void MyProxy::foo() { 
        m_foo(); // m_foo is a function pointer to foo() in the DLL obtained via GetProcAddress. 
    } 
    
    관련 문제