Проблемы с #импортом внешнего сервера .NET
Вопрос
В программе на 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