2012-01-09 1 views
1

C++/CLI 프로젝트에 정의 된 네이티브 클래스의 메서드를 내보내려면 어떻게해야합니까? 여기에 내가 가진 무엇 :C++/CLI 프로젝트에서 네이티브 형식 내보내기

.H 파일을 .cpp 파일

#pragma once 

#ifdef COMPILE_PRODUCER_LIB 
    #define PRODUCER_LIB_EXPORT __declspec(dllexport) 
#else 
    #define PRODUCER_LIB_EXPORT __declspec(dllimport) 
#endif 

public class PRODUCER_LIB_EXPORT MySecondNativeClass { 
public: 
    MySecondNativeClass(int val); 

    int getValue() const; 

private: 
    int m_value; 
}; 

:

#include "stdafx.h" 
#include "MySecondNativeClass.h" 

MySecondNativeClass::MySecondNativeClass(int val) { 
    this->m_value = val; 
} 

int MySecondNativeClass::getValue() const { 
    return this->m_value; 
} 

같은 프로젝트에서이 클래스를 사용하여 다른 (C에서 사용 잘 작동하지만 ++/CLI) 프로젝트에서 "해결되지 않은 외부 기호"링커 오류가 발생합니다. (COMPILE_PRODUCER_LIB 클래스를 포함하는 프로젝트에서만 정의 된 처리기 정의입니다.) 문제 (this page의 끝에서 다운로드)를 보여줍니다 내가 (비주얼 스튜디오 2010) 작은 솔루션을 만들었습니다

. 거기에 기본 클래스 MySecondNativeClass은 "ManagedProviderLib"프로젝트에 정의되어 있으며 "ExternalTestClass.cpp"(프로젝트 "ManagedExternalLib")에서 사용되고 있습니다.

+0

C++/CLI 프로젝트에 정의 된 네이티브 클래스의 메서드를 WHERE? 또 다른 C++/Cli 프로젝트? C# 프로젝트? 또는 원시 DLL. –

+0

불만족 스럽습니다. 다른 C++/CLI 프로젝트에서 사용할 수 있도록 내보내기하십시오. –

+0

적어도 "해결되지 않은 외부 기호"링커 오류 또는 둘 이상을 게시 할 수 있습니까? –

답변

4

DLL 프로젝트는 DLL의 가져 오기 라이브러리 인 빌드 디렉터리에 .lib 파일을 만듭니다. .lib 파일을 다른 프로젝트의 링커 + 입력, 추가 종속성 설정에 지정해야합니다.

참조 추가 기능이 작동하지 않을 수 있음을 유의하십시오. 어셈블리 메타 데이터에는 클래스에 대한 정의 만 포함됩니다. 귀하의 클래스는 관리되지 않는 네이티브 C++입니다. 또한 .cpp 파일이 실제로/clr없이 컴파일되었는지 확인하십시오. C++/CLI 컴파일러는 자연스럽게 C++ 클래스를 일리노이 변환하지만 매우 효율적이지는 않습니다. #pragma managed를 사용하여 소스 코드 파일 내에서이를 제어 할 수 있습니다.

+0

귀하의 대답은 정확한 힌트입니다, 비록 그것이 entierly 정확하지 않습니다. "참조 추가"는 네이티브 (관리되지 않는) DLL 파일과 관리되는 DLL 파일 (적어도 Visual Studio 2010에서는)에서 작동합니다. 또한 문제없이/clr을 사용하여 전체 프로젝트를 컴파일 할 수 있습니다. 유일한 것은 "참조 추가"를 "링커 -> 입력"으로 사용해야한다는 것입니다. –

+0

Brilliant! 관리되는 + 관리되지 않는 DLL은 모든 클래스 (C++ 클래스 포함)를 내보내므로 그 이유를 이해할 수 없었습니다. THNX! –

관련 문제