MIDL有没有办法关闭C样式头的生成

Is there a way with MIDL to turn off C-style headers generation?

本文关键字:样式 有没有 MIDL      更新时间:2023-10-16

我有一个简单的.IDL文件(iface.IDL),它描述了一个基于IUnknown的接口:

import "unknwn.idl"; 
[
    uuid(80DFDD28-F033-431e-B027-CDD2078FC78A)
]
interface ISunPathCalc : IUnknown {
    HRESULT Square([in, out] long * pVal);
    HRESULT Cube([in, out] long * pVal);
};

当尝试用midl /header iface.h iface.idl编译它时,我得到了3个文件:iface.h、iface_I.c和iface_p.c。iface.h文件包含ISunpathCalc接口的c++声明:

#if defined(__cplusplus) && !defined(CINTERFACE)
    MIDL_INTERFACE("80DFDD28-F033-431e-B027-CDD2078FC78A")
    ISunPathCalc : public IUnknown
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE Square( 
            /* [out][in] */ long *pVal) = 0;
        virtual HRESULT STDMETHODCALLTYPE Cube( 
            /* [out][in] */ long *pVal) = 0;
    };
#else   /* C style interface */

这个文件的其余大部分包含不必要的C内容。

Q:有没有办法告诉MIDL只生成标题的C++部分?是否可以关闭iface_i.c和iface_p.c文件的生成,并强制MIDL生成c++定义?

UPD1:

我尝试按照此处的指定添加[本地]属性:

[
    local,
    uuid(80DFDD28-F033-431e-B027-CDD2078FC78A)
]

但没有取得任何成功。

不幸的是,没有办法抑制C头的生成。

相关文章: