2

我有一个简单的 .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 内容。

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

UPD1:

我尝试添加此处指定的 [local] 属性:

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

但没有任何成功。

4

1 回答 1

3

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

于 2011-07-01T01:41:05.583 回答