c#でcomオブジェクトのprogIdを取得する方法があるかどうか知りたいです。例-COMであるドキュメントオブジェクトを公開するwebBrowserオブジェクトがあります。そのドキュメントオブジェクトのprogIDが何であるかを理解する方法はありますか?
progIDからオブジェクトを取得できることはわかっていますが、その逆の方法がわかりません。
c#でcomオブジェクトのprogIdを取得する方法があるかどうか知りたいです。例-COMであるドキュメントオブジェクトを公開するwebBrowserオブジェクトがあります。そのドキュメントオブジェクトのprogIDが何であるかを理解する方法はありますか?
progIDからオブジェクトを取得できることはわかっていますが、その逆の方法がわかりません。
に対してクエリを実行しIPersist
、その上でGetClassIDを取得できます。
それはあなたを取得しますCLSID
。次に、ProgIDFromCLSIDを呼び出します。
これにより、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# のエクスペリエンスをほとんどシミュレートできるため、最近では誰もそのようなことを手動で記述することを気にしません。)