2

IUnknown ベースのインターフェイスを記述する単純な .IDL ファイル (iface.idl) があります。

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、iface.h、iface_i.c、および iface_p.c の 3 つのファイルが生成されます。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:ヘッダーの C++ 部分のみを生成するように MIDL に指示する方法はありますか? 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 に答える