Проблемы с #import внепроцессного сервера .NET
В программе на C++ я пытаюсь импортировать TLB внепроцессного сервера .NET.
Я получаю такие ошибки, как:
z: \ server.tlh (111): ошибка C2146: синтаксическая ошибка: отсутствует ';' перед идентификатором GetType
z: \ server.tlh (111): ошибка C2501: '_TypePtr': отсутствуют спецификаторы класса хранения или типа
z: \ server.tli (74): ошибка C2143: синтаксическая ошибка: отсутствует ';' перед 'tag :: id'
z: \ server.tli (74): ошибка C2433: '_TypePtr': 'inline' не разрешен в объявлениях данных
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();
Меня не очень интересуют методы базового объекта .NET, такие как GetType (), Equals () и т. Д. Но GetType (), похоже, вызывает проблемы.
Некоторые исследования Google показывают, что я мог #import mscorlib.tlb
(или поместил его в путь), но я также не могу заставить это скомпилировать.
Какие-нибудь советы?
Ответов (5)5
Похоже, нужно использовать
[ClassInterface(ClassInterfaceType.None)]
Вот еще одно обсуждение подобной проблемы.
Часто, когда MSVC компилирует исходный код COM в a TLB
, остаются подсказки, например:
#import "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorlib.tlb"
Вы должны добавить это stdafx.h
перед строкой
#import "your_own.tlb"
После этого в ваш проект будут добавлены базовые типы, такие как _Type
, _ObjRef
для сгенерированных прототипов.
Надеюсь, это решит вашу проблему.
но более серьезная проблема заключается в том, что после того, как все будет сделано, могут возникнуть ошибки времени выполнения, когда вы вызовете Ptr в своей программе.
кто-нибудь может помочь?