Проблемы с #import .NET вне сервера - PullRequest
3 голосов
/ 16 августа 2008

В программе на 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 ]

3 голосов
/ 28 апреля 2010
#import "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorlib.tlb" was the solution for me.
1 голос
/ 15 января 2010

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

[ClassInterface(ClassInterfaceType.None)]

Вот еще одно обсуждение о подобной проблеме.

1 голос
/ 17 апреля 2009

чаще, когда против соблюдается источник ком в tlb в нем будет подсказка вот так: // #import "C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ mscorlib.tlb" Вы должны добавить это в StdAfx.h перед #inport youOwn.tlb свойство Basice, как _Type, _ObjRef будет добавлен в ваш проект для прототипа

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

но большая проблема: после того, как все сделано, при вызове Ptr в вашей программе будут некоторые ошибки во время выполнения

Кто-нибудь может помочь?

1 голос
/ 16 августа 2008

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

#import "server.tlb" no_namespace named_guids

Эта проблема также может помочь при использовании TLBEXP.EXE вместо REGASM.EXE.

0 голосов
/ 20 августа 2008

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

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

...