2011-12-04 3 views
0

난 네이티브 C++ (MFC 사용) 정적 라이브러리와 C++/CLI WinForms 응용 프로그램을 혼합하여 실험하고 있습니다. 내 NativeClass.h를 포함 시키려고하면 lib 클래스를 내보내는 데 AFX_EXT_CLASS을 사용하는 것이 이해되지 않아 C++/CLI 응용 프로그램을 컴파일하지 못합니다.C++/CLI의 네이티브 C++ 헤더 포함

그냥 작동 시키려면 기본 lib를 빌드 한 다음 헤더에서 AFX_EXT_CLASS을 제거한 다음 기본 lib에 링크 된 C++/CLI를 빌드하십시오. C++/CLI 응용 프로그램이 실행되고 대화 상자가 나타나서 내 NativeClass :: NativeFunction() 메서드에서 더미 값을 출력합니다. AFX_EXT_CLASS을 제거하지 않고 C++/CLI 앱을 빌드 할 수 없다는 것을 제외하고는 모든 것이 잘 작동하는 것 같습니다. 헤더를 편집하지 않고도이 작업을 수행하는 방법은 무엇입니까? 단일 단계 빌드를 선호합니다.

NativeClass.h(3): error C2470: 'NativeClass' : looks like a function definition, but there is no parameter list; skipping apparent body 

답변

0

내 C++/CLI 응용 프로그램의 stdafx.h에 #define AFX_EXT_CLASS을 추가하여 컴파일하고 실행했습니다. 나는 C++/CLI 응용 프로그램이 매크로와 관련이 없으므로 걱정할 필요가 없다는 것을 알았 기 때문에 컴파일러를 행복하게 만들어서 아무런 부작용을 일으키지 않는다. enter image description here

0

난 당신이 그 클래스에 대한 규정자를 필요가 있다고 생각하지 않습니다 AFX_EXT_CLASS 헤더에있는 동안

// NativeClass.h 
class AFX_EXT_CLASS NativeClass { 
    public: 
     NativeClass(); 
     ~NativeClass(); 

     int NativeFunction(); 
}; 

는 C++/CLI 응용 프로그램을 구축 할 때 내가 오류입니다. 당신의 수업은 아무 것도 상속받지 않기 때문에 필요하지 않습니다. 관리되는 C++/CLI 컴파일러는 #pragma managed에서 네이티브 클래스를 컴파일 할 수 있지만 이러한 네이티브 클래스에는 특수 수정자를 필요로하지 않습니다.

또한 MFC가 전체 C++ 세계라고 생각할 것입니다. 그렇지 않습니다. 나 자신을 포함하여 많은 사람들이/clr 스위치가 켜진 상태에서 많은 네이티브 C++ 클래스를 컴파일하며,이 이상한 AFX_EXT_CLASS 매크로를 사용한 적이 없습니다.

그래서 매크로없이이 클래스 만 포함하고 MFC에 전혀 의존하지 않는 약간의 독립 실행 형 프로젝트를 사용해 보는 것이 좋습니다. 그런 다음 관리되는 C++/CLI로 컴파일하십시오. 일단 작동 시키면, 클래스에 비트 단위로 기능을 추가하면 원하는 방식으로 작업 할 수 있습니다. 마침내 나는 MFC가 아마도/clr과 함께 작업하기 위해 제트 여야 할 수하물을 가지고 있다는 것을 알게 될 것이라고 생각한다.

+0

나는 개념의 증거로이 실험을 짓고 있어요 : 그냥 –

2

컴파일러에서 큰 진단을받지 못했다는 단순한 문제는 AFX_EXT_CLASS의 의미를 모르는 것입니다. 해제하지 않으면 매크로가 __declspec (dllimport)로 확장됩니다. # <afx.h>을 포함하여 문제를 해결하기 만하면됩니다. MFC 라이브러리의 공유 버전이 필요합니다. MFC 라이브러리를 선택하지 않았다면 불평 할 것입니다.

+0

네이티브 lib 또는 C++/CLI 응용 프로그램에서 # 을 포함합니까? –

+0

MFC를 사용하는 경우 네이티브 lib의 소스 코드에 이미 있습니다. C++/CLI 소스 코드에 추가해야합니다. lib의 헤더 파일에 #include 앞에 넣으십시오. –

+0

의미가 있습니다.나는 include를 추가했고 build했다. 그러나 실행을 시도 할 때 _crtIsValidHeapPtr()을 호출 할 때 디버그 어서션을 얻는다. 나는 다른 것을 시도해 보았지만,이 질문에 대한 내 대답을 참조하십시오. 내 대답에 문제가 있으면 입력 해 주시면 감사하겠습니다. 감사! –

0

은 당신이 CLR은 네이티브 C++ 코드를 실행하는 방법을 알고 여기에

이 도움이 될 것이다, 작업하세요 기존 프로젝트의 경우 우리는 AFX_EXT_CLASS를 사용하여 클래스를 dll/libs로 내보내는 거의 200 만 라인의 네이티브 C++ 코드를 라이브러리에 내장했습니다. 개념 증명은 AFX_EXT_CLASS 매크로와 함께 작동해야합니다. 그렇지 않으면 개념이 코드에서 작동하지 않습니다.