2008-08-15 11 views
3

В программе на C++ я пытаюсь #import TLB сервера out-of-proc .NET.Проблемы с #import .NET-сервера out-of-proc

я получаю ошибки типа:

г: \ server.tlh (111): ошибка C2146: синтаксическая ошибка: отсутствует ';' перед тем идентификатором '' GetType

г: \ server.tlh (111): ошибка C2501: '_TypePtr': отсутствует хранилище класса или типа спецификаторы

г: \ server.tli (74): ошибка C2143: синтаксическая ошибка: отсутствует ';' перед 'тегом :: ид'

г: \ server.tli (74): ошибка C2433: '_TypePtr': 'инлайн' не допускается на декларациях данных

г: \ server.tli (74): ошибка C2501: '_TypePtr': отсутствует хранилище класса или типа спецификаторы

г: \ 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 (или поместить его в путь), но я не могу это скомпилировать.

Любые советы?

ответ

1

Добавлено no_namespace и raw_interfaces_only моему #import:

#import "server.tlb" no_namespace named_guids 

использованием Также Tlbexp.exe вместо regasm.exe, кажется, помогает этот вопрос.

+0

TLBEXP не помог мне, raw_interfaces_only сделал. Почему пример кода содержит named_guids вместо raw_interfaces_only? – 2010-11-08 11:47:52

0

Кроме того, убедитесь, что ваш C# класс не имеет этого атрибута:

[ClassInterface (ClassInterfaceType.AutoDual)] < - кажется, вызывает ошибки в C++ с _TypePtr

+0

Любая идея, почему это происходит? – 2010-11-08 11:45:33

1

более ofenly, когда vs выполнил исходный код com на tlb , в нем будет такой подсказку: // #import "C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ mscorlib.tlb" вы добавите это в StdAfx .h до #inport youOwn.tlb Свойство basice как _Type, _ObjRef добавит ed в вас проект для прото типа

Я думаю, он решит вашу проблему.

но большая проблема: после everythin сделано, какие-то ошибки во время выполнения при вызове PTR в программировании

кто может помочь?

1

кажется, что вам нужно использовать

[ClassInterface(ClassInterfaceType.None)] 

Вот another discussion о подобной проблеме.

3
#import "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorlib.tlb" was the solution for me.