64ビット.NETアプリケーションで32ビットのアンマネージCOMサーバーを使用する必要があります。64ビット.NETアプリケーションで32ビットのアンマネージCOMサーバーを使用
私はいくつかの調査を行いましたが、COM +サーバーをCOM + サーバーアプリケーションでホストする適切なソリューションが見つかったようです。コンポーネントは専用(32ビット)プロセスでアクティブ化され、RPC経由で64ビットプロセスと通信します。 (link)
上記をテストするために、サンプルのCOMサーバーを作成し、COM +アプリケーションに登録しました。そのインターフェイスは次のようになります。
interface ITestComObj: IUnknown
{
HRESULT _stdcall Ping(void);
HRESULT _stdcall Uppercase([in] LPSTR input, [out, retval] LPSTR * output);
};
次に、これらのメソッドをCOM interop経由で呼び出す単純な.NETコンソールアプリケーションを作成しました。
まず、32ビットWinXPでテストしたところ、正常に動作しました。
その後、私は64ビットのWin7に移動しました。最初の呼び出し(パラメータなしのPing()メソッドへの)は成功しましたが、2番目の呼び出しは例外をスローしました(待機した後に):リモートプロシージャ呼び出しが失敗しました。 (HRESULTからの例外:0x800706BE)。
さらに調査を行った。私は何か変更があるかどうかを見るためにクライアントを32ビットプロセス(x86ターゲットプラットフォームに構築)にしましたが、結果は同じでした。しかし、インプロセスアクティベーション(COM +アプリケーションタイプをライブラリアプリケーションに変更)に切り替えると、クライアントが機能しました。
もちろん、クロスプロセスパラメータの渡し方はWin7では間違っていますが、何時間もグーグルグーグルでも答えが見つかりませんでした。
アイデア?
? – sharptooth
あなたはこの質問を見たことがありますか? http://stackoverflow.com/questions/3573523/issues-with-porting-com-applications-from-windows-2003-to-windows-2008-server – sharptooth