Нет определений типов в предопределенном IDL-ФАЙЛЕ
Вопрос
Во- первых,
Используя Однотонные 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.