-1

COM DLL を含むプロジェクトを継承しました。私は COM の初心者ですが、何かが正しくないようです。IDL で定義されたインターフェイスは、VARIANTすべてのプロパティとメソッドの戻り値/パラメーターの型のみを使用します。これには正当な理由がありますか?前の開発者は何かに手をつけていたように感じますが、確認したいと思います。

私のIDLは次のようになります。

interface IMyComInterface : IDispatch
{
    [id(1), helpstring("method CheckMessage")] HRESULT CheckMessage([in] VARIANT vMsg);
    [id(2), helpstring("method CheckFolder")] HRESULT CheckFolder([in] VARIANT Folder, [out] VARIANT *pCount, [out, retval] VARIANT *pErrorCount);
    [propget, id(3), helpstring("property Flags")] HRESULT Flags([out, retval] VARIANT *pVal);
    [propput, id(3), helpstring("property Flags")] HRESULT Flags([in] VARIANT newVal);
    [propget, id(4), helpstring("property MessageStore")] HRESULT MessageStore([out, retval] VARIANT *pVal);
    [propput, id(4), helpstring("property MessageStore")] HRESULT MessageStore([in] VARIANT newVal);
    [propget, id(5), helpstring("property Directory")] HRESULT Directory([out, retval] VARIANT *pVal);
    [propput, id(5), helpstring("property Directory")] HRESULT Directory([in] VARIANT newVal);
    [propget, id(6), helpstring("property MessageCount")] HRESULT MessageCount([out, retval] VARIANT *pVal);
};

どうもありがとう。

編集:

明確にするために、これらVARIANTの s はすべて明示的な型に置き換えることができます。

4

3 に答える 3

1

インターフェイスは、IDispatchそれがデュアル インターフェイスであることを意味します。メソッドをインターフェイスから直接呼び出すか、または を介し​​て呼び出すことができますiDispatch::Invoke。に渡されるパラメータはすべて、 の別の名前でInvokeある型でなければなりません。 http://msdn.microsoft.com/en-us/library/ms891678.aspxを参照してください。VARIANTARGVARIANT

于 2013-02-19T18:45:28.453 に答える
1

パフォーマンスや簡素化が必要な場合は、 VARIANT 型を適切な値に変更し、使用されている型に近づけます。これはインターフェイス ブレークであることを忘れないでください。
使用する有効な値を表示:
COM データ型

于 2013-02-19T18:01:20.683 に答える
0

VBおよびスクリプト言語で動作することが想定される特定のタイプのデュアル インターフェイスについてはVARIANT、直接タイプを使用することをお勧めします。たとえばVARIANT、ほぼすべての種類のSAFEARRAYインターフェイス ポインターを使用する方が適切です。しかし、あなたはテストして見ることができます。

于 2013-02-19T16:50:02.760 に答える