Проблемы с #import внепроцессного сервера .NET

В программе на C++ я пытаюсь импортировать TLB внепроцессного сервера .NET.

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

z:\server.tlh(111) : error C2146: syntax error : missing ';' before identifier 'GetType'

z:\server.tlh(111) : error C2501: '_TypePtr' : missing storage-class or type specifiers

z:\server.tli(74) : error C2143: syntax error : missing ';' before 'tag::id'

z:\server.tli(74) : error C2433: '_TypePtr' : 'inline' not permitted on data declarations

z:\server.tli(74) : error C2501: '_TypePtr' : missing storage-class or type specifiers

z:\server.tli(74) : fatal error C1004: unexpected end of file found

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
0
4 047
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

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

#import "server.tlb" no_namespace named_guids

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

TLBEXP мне не помог, raw_interfaces_only помог. Почему пример кода содержит named_guids вместо raw_interfaces_only?

Ignacio Soler Garcia 08.11.2010 14:47

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

[ClassInterface (ClassInterfaceType.AutoDual)]

Есть идеи, почему это происходит?

Ignacio Soler Garcia 08.11.2010 14:45

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

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

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

#import "your_own.tlb"

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

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

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

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

Похоже, нужно использовать

[ClassInterface(ClassInterfaceType.None)]

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

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

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

Недавно пришлось использовать этот #import "C:\WINDOWS\Microsoft.NET\Framework64\v4.0.30319\mscorlib.tl‌​b" rename("or", "or2") rename("ReportEvent", "ReportEvent2") no_namespace

Simon Mourier 29.07.2020 20:06

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