Вопрос

В программе на C++ я пытаюсь #import 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:найден неожиданный конец файла

ТЛХ выглядит так:

_bstr_t GetToString();
VARIANT_BOOL Equals (const _variant_t & obj);
long GetHashCode();
_TypePtr GetType();
long Open();

Меня не очень интересует наличие методов объекта .NET базового объекта, таких как GetType(), Equals() и т. д.Но GetType(), похоже, вызывает проблемы.

Некоторые исследования Google показывают, что я мог бы #import mscorlib.tlb (или поместите его в путь), но я тоже не могу его скомпилировать.

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

Это было полезно?

Решение 3

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

#import "server.tlb" no_namespace named_guids

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

Другие советы

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

Более того, когда VS подчинялся источнику COM в TLB в нем будет иметь такой намек:// #Import "C: Windows Microsoft.net Framework v2.0.50727 mscorlib.tlb" Вы добавите это в stdafx.h до #inport out wyown.tlb Свойство основания, как _type, _objref будет добавлено в вас. Проект для типа прото

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

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

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

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

[ClassInterface(ClassInterfaceType.None)]

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top