0

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 };
4

3 に答える 3

2

ERROR_ACCESS_DENIEDは、COAUTHINFOで指定されたパラメーターが間違っていることが原因である可能性があります。認証、承認レベルをNONEに設定します。これは、リモートマシンに接続するためのアクセス許可を取得するのに十分ではありません。次の値を設定してみてください:RPC_C_AUTHN_DEFAULT(COMに最適な認証サービスをネゴシエートさせる)、RPC_C_AUTHZ_NONE、RPC_C_AUTHN_LEVEL_DEFAULT、RPC_C_IMP_LEVEL_IMPERSONATE。MSDNソースも参照してください-COAUTHINFO構造

于 2012-07-03T17:21:38.047 に答える
0

-2147024891(または16進数に変換された場合は0x80070005)のHRESULTはERROR_ACCESS_DENIEDです。したがって、リモートマシンに接続しようとすると、アクセス許可エラーになります。

于 2012-07-03T15:32:42.053 に答える
0

エラーはE_ACCESS_DENIEDを意味します。現在のユーザーがコンポーネントにアクセスする権限を持っていることを確認してください。サーバーボックスで実行dcomcnfg(または「コンポーネントサービス」)し、「DCOM Config」で適切なコンポーネントを見つけ、「セキュリティ」でアクセス許可を変更して、呼び出し元のユーザーにアクティブ化とアクセスの両方を許可します。

または、呼び出し元のユーザーがサーバーボックスの管理者であることを確認してください。

于 2012-07-03T15:37:17.160 に答える