Есть ли утилита для компиляции файла .ridl
, используемого C++ Builder, для генерации заголовка C?Compiling .ridl file
Насколько я могу судить, TLIBIMP
может извлекать только RIDL из TLB и генерировать заголовки C++ из TLB. Я не вижу возможности генерировать заголовки из RIDL.
с использованием Microsoft SDK 7.1 в "midl.exe" на .ridl файл я получаю кучу ошибок:
.\MyObject.ridl(114) : error MIDL2072 : inapplicable attribute : [version] [ Parameter 'param1' of Procedure 'func1' (Interface 'IMyObject') ]
Также есть некоторые хорошие предупреждения:
.\MyObject.ridl(343) : warning MIDL2400 : for oleautomation, optional parameters should be VARIANT or VARIANT * : [optional] [ Parameter 'param2' of Procedure 'func2' (Interface 'IMyObject') ]
который С тех пор я узнал, но не знал, когда изначально определяю свой интерфейс. Было бы неплохо иметь подобные предупреждения при определении интерфейса в C++ Builder.
Я предполагаю, что .ridl
является расширением, изобретенным Embarcadero, а [version]
является тегом в этом расширении. Ошибка конкретно относится к version(1.0)
, которая отображается в заголовке для enum
s, которые я определил. (Каждое использование параметра enum в качестве параметра функции вызывает предупреждение).
(Если я исправлю ошибки, удалив этот лишний тег version
, то он правильно создает заголовки, которые я могу использовать в программе на языке C, построенной с помощью C++ Builder).
Thanks Remy. На самом деле я смог генерировать заголовки C, используя MIDL после редактирования расширения Embarcadero. –
Сводный вопрос, есть ли документация где-то точно, что расширения Embarcadero (выше спецификации MIDL)? –
Атрибут '[version]' не является специфичным для Embarcadero, Microsoft также использует его, см. [Атрибут интерфейса] (http://msdn.microsoft.com/en-us/library/windows/desktop/aa367054.aspx) и [атрибут версии] (http://msdn.microsoft.com/en-us/library/windows/desktop/aa367306.aspx). RIDL является ** ограниченным ** IDL, Embarcadero пропускает вещи из RIDL, они не добавили к нему особых вещей. Звучит скорее как ошибка в вашей версии MIDL. –