0

C# フロント エンドから呼び出される C# .NET COM コンポーネントを作成しました。ただし、古い Visual C++ 6 クライアント アプリからも動作する必要があります。これは、すべてが同じマシンにインストールされている場合は正常に機能しますが、リモートで呼び出す必要があります。これは、クラスが登録されていないというエラーで失敗します。コンポーネントがインストールされているサーバーは Windows 7 64 ビット マシンで、クライアントは 32 ビット XP です。私のコードはかなり複雑だったので、インターネットで簡単な例を見つけました。基本的には私のコードと同じですが、まったく同じように失敗します。例はここにあります:

http://www.codeproject.com/Articles/12673/Calling-Managed-NET-C-COM-Objects-from-Unmanaged-C

その例のクライアントは、同じマシンで正常に動作します。クライアントコードをこれに変更しました(リモートで実行するため):

CoInitialize(NULL);

COSERVERINFO si; 
MULTI_QI qi; 
COAUTHINFO cai = { RPC_C_AUTHN_WINNT, RPC_C_AUTHZ_NONE, 0, RPC_C_AUTHN_LEVEL_DEFAULT, RPC_C_IMP_LEVEL_IMPERSONATE,0, EOAC_NONE };
si.dwReserved1 = 0; 
si.pwszName =L"{machine name}"; 
si.pAuthInfo = &cai; 
si.dwReserved2 = 0; 

qi.pIID = &MyInterop::IID_IMyDotNetInterface; 
qi.pItf = NULL;
qi.hr = 1; 

HRESULT hr = CoCreateInstanceEx(MyInterop::CLSID_MyDotNetClass,NULL,CLSCTX_REMOTE_SERVER ,&si,1,&qi);//CLSCTX_SERVER

if (SUCCEEDED(hr))
{
    MyInterop::IMyDotNetInterfacePtr* pCom = new MyInterop::IMyDotNetInterfacePtr;

    pCom->Attach((MyInterop::IMyDotNetInterface*)qi.pItf);


    HRESULT hRes = (*pCom)->ShowCOMDialog();

    delete pCom;

}

CoUninitialize();

ただし、CoCreateInstanceEx では、HRESULT が 0x80040154 (クラスが登録されていません) で失敗します。上記の同じクライアント コードは、Visual C++ 6 で記述された COM コンポーネントをリモートで呼び出すときに正常に動作します。

これが失敗する理由はありますか?

4

0 に答える 0