1

短い 2 つの質問です。いくつかのトピックやページを読んでも明確な答えが見つかりません。

  1. いくつかの相互運用 dll を自分のコンピューターにコピーした場合、それは AnyCpu にビルドされ (.net リフレクターでチェック)、64 ビットのアプリケーション ビルドで参照したい場合 (今は例外が発生します) - 64 ビットとして登録しています。十分です(regasmを使用)-または、相互運用を登録していない可能性があります-COMのみですか?

  2. 相互運用 dll がある場合、この相互運用が作成された元の COM を取得できますか (これは、64 ビット環境などで別の相互運用を作成するのに役立ちます)?

編集:@Davidの応答の後、もう1つのオプションをチェックしましたが、予期せず機能しましたが、この議論と解決策にとってそれが何を意味するのかわかりません。誰でもこれを解決するのを助けることができますか?

私がしたこと:ここの指示に従ったところ、COM のオブジェクトが 64 ビット アプリケーションで動作するようになりました。すべてのオブジェクト (相互運用で何百ものオブジェクト) に対してこれを手動で行うのは難しいかもしれません - 私の相互運用を処理する正しい方法ですか?

よろしく、ヨトベク

4

1 に答える 1

2

COM サーバー (DLL) はネイティブ コードであるため、ビット数の境界 (つまり、32 ビットから 64 ビット) を越えることはできません。COM DLL をロードする 32 ビット プロセスを使用するには、.NET コードを x86 としてコンパイルする必要があります (まあ、少なくともスタートアップ コードはそうします) (ただし、COM DLL 自体が 64 ビットでない場合)。スタートアップ コードは x64 としてコンパイルする必要があります)。

相互運用 DLL は、COM オブジェクトのメソッドを呼び出すための接着剤を含む .NET アセンブリです。相互運用 DLL がどの COM DLL 用であるかを知っていても、異なるビット数で動作する相互運用 DLL を生成することはできません。

于 2013-01-02T20:43:29.497 に答える