Visual Studio 6で作成されたCOMコンポーネントがあります。これは、開発マシンの1つで実行しているWindowsサービスにあります。私はそれを呼び出すための簡単なMFCテストアプリを作成しました。これはこのマシンから実行すると正常に機能します。コードは次のようになります。
COSERVERINFO si;
MULTI_QI qi;
COAUTHINFO cai = { RPC_C_AUTHN_NONE, RPC_C_AUTHZ_NONE, 0,RPC_C_AUTHN_LEVEL_NONE, RPC_C_IMP_LEVEL_IMPERSONATE,0, EOAC_NONE };
si.dwReserved1 = 0;
si.pwszName =L"{machine name}";
si.pAuthInfo = &cai;
si.dwReserved2 = 0;
qi.pIID = &IID_IMyComponent;
qi.pItf = NULL;
qi.hr = 1;
HRESULT hr = CoCreateInstanceEx(CLSID_MyComponent,NULL,CLSCTX_REMOTE_SERVER ,&si,1,&qi);
ただし、MFCテストアプリを他の開発マシンに移動して、他のマシンでコンポーネントを呼び出そうとすると、失敗します。CoCreateInstanceExから返されるhresultは-2147024891です。
プロキシスタブDLLを作成し、両方のマシンに登録しました。私は何か他のものが欠けていますか?
更新:COUTHINFO構造を以下に更新しましたが、機能します。
COAUTHINFO cai = { RPC_C_AUTHN_WINNT, RPC_C_AUTHZ_NONE, 0, RPC_C_AUTHN_LEVEL_DEFAULT, RPC_C_IMP_LEVEL_IMPERSONATE,0, EOAC_NONE };