Нет предопределенных типов в предопределенном ФАЙЛЕ IDL - PullRequest
0 голосов
/ 10 января 2009

Во-первых,

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

Использование oleview (просмотрщик объектов OLE / COM) - используется для разработки кода IDL.

На этом этапе, используя компилятор MIDL , теперь у меня возникают проблемы при попытке получить следующее:

Синтаксис в строке 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 ]

1 голос
/ 12 января 2009

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

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

решаемые

Добавить предварительное объявление - в начало файла IDL:

  • import "ocidl.idl";
  • интерфейс S8SimObject;
1 голос
/ 10 января 2009

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

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

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

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

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

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

...