Нет определений типов в предопределенном IDL-ФАЙЛЕ

StackOverflow https://stackoverflow.com/questions/431206

  •  08-07-2019
  •  | 
  •  

Вопрос

Во- первых,

Используя Однотонные C ++, без ATL, MFC пытается использовать интерфейс COM-объекта.

Используя олевью (OLE/COM Object viewer) - используется для разработки IDL-кода.

На этом этапе, используя МИДЛ Компилятор, теперь у меня возникли проблемы при попытке создать следующее:

Синтаксис в строке cmd:

midl /nologo /env win32 /tlb ".\S8_.tlb" /h ".\S8_.h" /iid ".\S8_i.c" S8.idl

  • Соответствующий .TLB (библиотека типов)
  • A .H (заголовок)
  • Определения IID включают файл (*_i.c)
  • Прокси-сервер (*_p.c)

Ошибка компилятора MIDL:

S8.IDL(513) :ошибка MIDL2025 :синтаксическая ошибка :ожидаю спецификацию типа рядом с "S8SimObject"

    HRESULT LinkSimObjects(
                    [in] S8SimObject* SourceObject, ####line 513 ####
                    [in] S8SimObject* DestObject,
                    [in] float TravelTime);
Это было полезно?

Решение 2

Ошибка компилятора MIDL

S8.IDL(513) : ошибка MIDL2025 :синтаксическая ошибка :ожидая спецификацию типа рядом "Объект S8SimObject"

РЕШАЕМАЯ

Добавить a прямое заявление - в ВЕРХНЕЙ части IDL- файла:

  • импортировать "ocidl.idl";
  • интерфейс S8SimObject;

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

Ну, я не совсем понимаю ваш вопрос здесь, но следующее должно помочь:

  • Общедоступные определения перечислений должны иметь свои собственные uuid ( идентификатор пользователя ) быть по-настоящему публичным.
  • Я видел, что эти определения перечисления не попадают в библиотеку типов, если только они на самом деле не используются в каком-либо интерфейсном методе.Я не знаю причины этого, возможно, я пропустил что-то простое (например, добавление этого перечисления в библиотечный блок или что-то еще).
  • short обычно означает короткое целое число, а не число с плавающей запятой одинарной точности.
  • Эквивалент float является single в VB, но, как я видел по другим вашим вопросам, я подозреваю, что вы на самом деле имели в виду замену single с float.

Кстати, я бы рекомендовал опубликовать один минимальный (компилируемый) файл IDL (лишенный большинства определений), который более или менее напоминает то, что вы пытаетесь скомпилировать.Это помогает избежать некоторой путаницы, поскольку вы, например, используете IS8Simulation в вашем тексте, но S8SimObject в вашем скопированном фрагменте IDL.И это также помогло бы, если бы вы указали ожидаемый результат и неожиданную (для вас) ошибку.

Редактировать

Что ж, эта ошибка компиляции, которую вы сейчас вставили, проста: S8SimObject не определено.Вам нужно всегда ссылаться на интерфейс в объявлениях методов (IS8Simulation), никогда к coclass, который реализует интерфейс.

Как вы сказали, вы изменяете существующий IDL-файл здесь:Какова основная цель?Если исходный файл IDL всегда использует S8SimObject, возможно , единственная проблема заключается в том , что определение S8SimObject не включен в верхнюю часть файла IDL?Если у вас есть библиотека типов, определяющая S8SimObject кроме того, вы можете экспортировать IDL этого интерфейса с помощью OleView.

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