9

c#でcomオブジェクトのprogIdを取得する方法があるかどうか知りたいです。例-COMであるドキュメントオブジェクトを公開するwebBrowserオブジェクトがあります。そのドキュメントオブジェクトのprogIDが何であるかを理解する方法はありますか?

progIDからオブジェクトを取得できることはわかっていますが、その逆の方法がわかりません。

4

1 に答える 1

9

に対してクエリを実行しIPersist、その上でGetClassIDを取得できます。

それはあなたを取得しますCLSID。次に、ProgIDFromCLSIDを呼び出します。

pinvoke 宣言はこちらです。

これにより、ProgID が取得されます。

編集:

インターフェイスをクエリするには、C# でキャストを実行するだけです。

IPersist p = myObj as IPersist;
if (p != null)
{
    // phew, it worked...
}

舞台裏では、C++ で示されているように、これが実際に起こっていることです。

IUnknown *pUnk = // ... get object from somewhere

IPersist *pPersist = 0;
if (SUCCEEDED(pUnk->QueryInterface(IID_IPersist, (void **)&pPersist)))
{
    // phew, it worked...
}

(しかし、スマート ポインターは C# のエクスペリエンスをほとんどシミュレートできるため、最近では誰もそのようなことを手動で記述することを気にしません。)

于 2009-08-10T06:46:36.260 に答える