既存のネイティブ C++ ATL インプロセス COM サーバーを強制的に別のプロセスにしようとしています。COM サーバーを変更せずに、DCOM がこれを実行してくれることを願っています。
通常のレジストリ設定から始めました。HKCR\CLSID{classId} エントリと、.dll ファイルへのパスを指定する InProcServer32 キーがあります。
アプリケーション ID (GUID) を生成し、あちこちに追加しました。具体的には、アプリケーション ID と等しい HKCR\CLSID{classId} の下に文字列値「AppId」を追加しました。また、HKCR\AppId{applicationId} キーと、空の文字列に等しい文字列値「DllSurrogate」を追加しました。COM サーバーをデフォルトのシステム提供のサロゲートに強制するには、これで十分だと思いました。
DCOM アプリケーションが DCOM 構成コンソールに表示されます。CoCreateInstance()
ただし、またはを呼び出しCoGetClassObject()
てクラスIDを指定すると、CLSCTX_LOCAL_SERVER
「クラスが登録されていません」が返されます。私は何を間違っていますか?
UPD: 解決済み。実行した手順は、何らかの理由で InProcServer32 キーの下に同じパスを持つ間違ったクラス ID のレジストリを編集していたことを除いて、それを機能させるのに十分でした-おそらくそれは COM 地獄の問題でした.