Сведения о вопросе

LiKIY

13:01, 7th August, 2020

Теги

c#   c++   com   interop    

Проблемы с #import из .NET out-of-proc сервер

Просмотров: 470   Ответов: 5

В программе C++, я пытаюсь #import TLB из .NET out-of-proc сервер.

Я получаю ошибки, как:

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

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



  Сведения об ответе

fo_I_K

03:55, 8th August, 2020

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


  Сведения об ответе

ЯЯ__4

13:04, 10th August, 2020

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

[ClassInterface(ClassInterfaceType.None)]

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


  Сведения об ответе

VERSUION

11:42, 23rd August, 2020

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

#import "server.tlb" no_namespace named_guids

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


  Сведения об ответе

#hash

19:04, 3rd August, 2020

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

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

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

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


  Сведения об ответе

dumai

03:12, 3rd August, 2020

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

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться