2011-03-21 9 views
0

/clr 옵션으로 작성된 혼합 모드 어셈블리가 있습니다. /clr 옵션으로 빌드 된 다른 혼합 모드 어셈블리에 의해 소비되도록 클래스를 내보내려고합니다.혼합 모드 어셈블리의 서명에 관리되지 않는 형식의 메서드 내보내기

제 문제는 메서드의 서명에 관리되는 형식과 관리되지 않는 형식이 혼합되어 있다는 것입니다. 예를 들어 :

static System::String ^Convert(const CString from); 

처음에 나는이 구현되지 않은 심판 클래스 __declspec(dllexport)을 사용했습니다. 오류 C3395로 실패했습니다. __declspec (dllexport)는 서명의 관리되는 유형으로 인해 __clrcall 호출 규칙이있는 함수에 적용 할 수 없습니다. 나의 다음번 수업은 클래스를 ref 클래스로 만드는 것이었다. 이제 어셈블리를 빌드 및 리플렉터과 같이 보낸 방법을 표시

public static unsafe string Convert(CStringT<wchar_t,ATL::StrTraitATL<wchar_t,ATL::ChTraitsCRT<wchar_t> > > modopt(IsConst) modreq(IsCopyConstructed)* from); 

그러나 클라이언트 어셈블리에, 나는 내 보낸 방법을 참조 할 수 있도록 실패 ...

CString atlString("test"); 
AtlCStringConverter::Convert(atlString); 

... C2039 : 'Convert': 'XXX :: AtlCStringConverter'의 구성원이 아닙니다. 서명이 일치하지 않을 수있는 다른 char 유형을 혼합하는 것과 같은 명백한 실수를 확인했습니다.

이 내보내기 시도는 관리/비 관리 유형의 혼합이 서명에서 나란히 표시된다는 점에서 실제로 좋지는 않지만이 혼합 관리/비 관리는 내에서 혼합 모드 어셈블리 혼합 모드 DLL 사이의 서명에서 이러한 유형의 혼합을 사용하여 형식을 내보낼 수있는 방법이 없는지 궁금합니다.

답변

관련 문제