サードパーティ製品のプラグインを作成しようとしています。これは、提供されたタイプ ライブラリから指定されたインターフェイスを実装するネイティブ C++ DLL の形式をとります。私のプラグインは正常に読み込まれ、インターフェイスによって記述されたメソッドが期待される時点で呼び出されています。プラグインからログ ファイルを書き出し、Web サービスにクエリを実行できます。これまでのところ、問題ありません。
ただし、私のプラグインがメイン プログラムを照会するために、Initialize()
メソッドはIDispatch
インターフェイスを渡します。このインターフェイスを次のようなコードで使用しようとしています。
Initialize(LPDISPATCH pDispArchivingControl) {
LPOLESTR ptName = L"currentVaultId";
HRESULT hr= pDispArchivingControl->GetIDsOfNames(IID_NULL, &ptName, 1,
LOCALE_USER_DEFAULT, &dispID);
// add parameters, etc
hr = pDispArchivingControl->Invoke(dispID, IID_NULL, LOCALE_SYSTEM_DEFAULT,
DISPATCH_METHOD, &dp, pvResult, NULL, NULL);
// hr = 0x80020003 Member not found.
}
最初のセクション はGetIDsOfNames()
、私がそうあるべきだと思うことを行います。つまり、プログラムのドキュメントからメソッドの名前を入れると、-15、27 などのptName
異なる値が得られますdispID
。
2 番目のセクション はInvoke()
、常に HRESULT 0x80020003 (メンバーが見つかりません) を返します。
ここにリストされているいくつかの解決策を見つけました: HOWTO: Troubleshoot "Member Not Found" 0x80020003 Error . 解決策 1 では、4 番目のパラメーターとして DISPATCH_METHOD と DISPATCH_PROPERTYGET の両方を試しました。dispID で値を取得しているため、2 と 3 は適用できないと想定するのは正しいですか? これらを変更する方法もわかりません。
私は今ちょっとアイデアがありません.Googleはそれ以上私を助けてくれません.誰が次に何をすべきか提案できますか?
更新: これは、メソッドの 1 つが oleview でどのように見えるかです。ツリービューで見つけることができませんでしたが、File > View TypeLib で開くことができました...