编译.ridl文件

时间:2014-07-28 00:03:51

标签: com c++builder idl

是否有用于编译C ++ Builder使用的.ridl文件以生成C头的实用程序?

据我所知,TLIBIMP只能从TLB中提取RIDL,并从TLB生成C ++头。我没有看到从RIDL生成标头的选项。

在.ridl文件中使用Microsoft SDK 7.1的“midl.exe”,我收到一堆错误:

.\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。 (每次使用枚举作为函数参数都会触发警告)。

(如果我通过删除多余的version标记来修复错误,那么它会正确生成标题,我可以在使用C ++ Builder构建的C程序中使用它。)

1 个答案:

答案 0 :(得分:3)

RIDL file仅适用于Embarcadero编译器。 Embarcadero使用RIDL而不是标准IDL,RIDL与MIDL.exe不兼容。

在2009年之前的版本中,IDE直接编辑了TLB文件,然后将其按原样链接到可执行文件中。这容易出错,难以维护和编辑,并且不适合VCS系统。因此创建了RIDL,TLB文件成为项目编译期间动态创建的中间文件,如OBJ和RES文件。

没有工具直接从RIDL文件创建C / C ++源文件。但是,有一个GenTLB.exe工具可以从RIDL文件创建TLB文件,然后您可以使用TLIBIMP.exe工具从TLB文件创建C / C ++源文件。

但请注意,TLIBIMP.exe生成的C / C ++源文件仅在C ++ Builder中可用,因为它们依赖于Embarcadero特定的编译器扩展和RTL标头/类型。如果要将TLB文件与其他编译器一起使用,则必须使用自己的TLB导入工具/功能。

相关问题