.NET out-of-proc 서버의 #import 관련 문제
문제
C++ 프로그램에서 .NET out-of-proc 서버의 TLB를 #import하려고 합니다.
다음과 같은 오류가 발생합니다.
z:\server.tlh(111) :오류 C2146:구문 오류:없어진 ';' 식별자 'gettype'전
z:\server.tlh(111) :오류 C2501:'_TypePtr':스토리지 클래스 또는 유형 지정자가 누락되었습니다.
z:\server.tli(74) :오류 C2143:구문 오류:없어진 ';' '태그 :: id'이전
z:\server.tli(74) :오류 C2433:'_TypePtr':데이터 선언에는 '인라인'이 허용되지 않습니다.
z:\server.tli(74) :오류 C2501:'_TypePtr':스토리지 클래스 또는 유형 지정자가 누락되었습니다.
z:\server.tli(74) :치명적인 오류 C1004:예기치 않은 파일 끝이 발견되었습니다.
TLH는 다음과 같습니다.
_bstr_t GetToString();
VARIANT_BOOL Equals (const _variant_t & obj);
long GetHashCode();
_TypePtr GetType();
long Open();
저는 GetType(), Equals() 등과 같은 기본 개체 .NET 개체 메서드를 갖는 데 별로 관심이 없습니다.그러나 GetType()이 문제를 일으키는 것 같습니다.
일부 Google 조사에 따르면 #import mscorlib.tlb
(또는 경로에 넣지만) 컴파일할 수도 없습니다.
어떤 팁이 있나요?
해결책 3
내 #import에 no_namespace 및 raw_interfaces_only를 추가했습니다.
#import "server.tlb" no_namespace named_guids
또한 REGASM.EXE 대신 TLBEXP.EXE를 사용하면 이 문제에 도움이 되는 것 같습니다.
다른 팁
#import "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorlib.tlb" was the solution for me.
더 이상적으로, VS가 Com 소스를 TLB로 준수하면 다음과 같은 힌트를 얻을 수 있습니다.// #import "c : wind 프로토 유형에 대한 프로젝트
내 생각에는 그것이 당신의 문제를 해결할 것입니다.
하지만 더 큰 문제는 다음과 같습니다.모든 작업이 완료된 후 프로그램에서 Ptr을 호출하면 런타임 오류가 발생합니다.
누구든지 도와줄 수 있나요?
또한 C# 클래스에 다음 특성이 없는지 확인하세요.
[ClassInterface(ClassInterfaceType.AutoDual)] <-- _TypePtr을 사용하면 C++에서 오류가 발생하는 것 같습니다.