Com 编译.ridl文件

Com 编译.ridl文件,com,c++builder,idl,Com,C++builder,Idl,是否有一个实用程序用于编译C++Builder使用的.ridl文件以生成C头 P> >代码> TLIbIMP/COD>只能从TLB中提取RIDL,并从TLB生成C++头。我看不到从RIDL生成标题的选项 在.ridl文件上使用Microsoft SDK 7.1的“midl.exe”时,会出现一系列错误: .\MyObject.ridl(114) : error MIDL2072 : inapplicable attribute : [version] [ Parameter 'param1'

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

<> P> >代码> TLIbIMP/COD>只能从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]
是该扩展中的一个标记。该错误特别指出现在我定义的
enum
s标题中的
版本(1.0)
。(每次使用枚举作为函数参数都会触发警告)

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

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

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

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


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

谢谢Remy。实际上,在编辑完Embarcadero扩展之后,我能够使用MIDL生成C标题。必然的问题是,是否有任何文档确切说明Embarcadero扩展是什么(高于MIDL规范)?
[version]
属性不是Embarcadero特有的,Microsoft也使用它,请参阅和。RIDL是一个受限IDL,Embarcadero从RIDL中省略了一些内容,他们没有向其中添加自定义内容。听起来更像是MIDL版本中的一个bug。正如我在帖子中提到的,只有使用
version
enum
触发MIDL 7.00.0555中的错误。MSDN页面不清楚这是否是允许使用的(尽管我不明白为什么不应该)。我将发布一个新问题,我认为MIDL不支持枚举的版本控制:。我认为唯一适用于枚举的属性是。看起来
[version]
只适用于接口和类。