Проблемы с #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»: «встроенный» недопустим в объявлениях данных

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

Какие-нибудь советы?

15.08.2008 20:40:11
5 ОТВЕТОВ
РЕШЕНИЕ

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

#import "server.tlb" no_namespace named_guids

Также, использование TLBEXP.EXE вместо REGASM.EXE, похоже, помогает в этой проблеме.

1
28.10.2010 07:06:14
TLBEXP не помог мне, raw_interfaces_only помог. Почему пример кода содержит named_guids вместо raw_interfaces_only?
Ignacio Soler Garcia 8.11.2010 11:47:52

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

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

0
20.08.2008 17:08:27
Есть идеи, почему это происходит?
Ignacio Soler Garcia 8.11.2010 11:45:33

Часто, когда MSVC компилирует исходный код COM в a TLB, остаются такие подсказки, как:

#import "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorlib.tlb"

Вы должны добавить это stdafx.hдо строки

#import "your_own.tlb"

После этого основные типы, такие как _Type, _ObjRefбудут добавлены в ваш проект для созданных прототипов.

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

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

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

1
11.04.2020 19:21:36

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

[ClassInterface(ClassInterfaceType.None)]

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

1
28.10.2010 07:06:59
#import "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorlib.tlb"

Было решение для меня.

3
11.04.2020 19:21:54