문제

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을 호출하면 런타임 오류가 발생합니다.

누구든지 도와줄 수 있나요?

이용하셔야 할 것 같습니다

[ClassInterface(ClassInterfaceType.None)]

여기는 또 다른 토론 비슷한 문제에 대해서.

또한 C# 클래스에 다음 특성이 없는지 확인하세요.

[ClassInterface(ClassInterfaceType.AutoDual)] <-- _TypePtr을 사용하면 C++에서 오류가 발생하는 것 같습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top