走32ビットアプリを使用32ビットコ64ビットWindowsマシン
質問
私C#を用いたC++COMオブジェクトの両方を32ビット機です。しかし、今まで実行していくものとして64ビット機です。の登録を行ったのCOMオブジェクトです。対応する入力した名簿にコンピューター\hkey_classes_root\wow6432node\clsid{xxx}.しかし、いアプリケーションを起動しうる"の検索のクラスの工場のためのコンポーネントのCLSID{xxx}失敗により以下のようなエラー:80040154.".しかし、エラーコードのクラスは、登録されていません。てください。!!感謝
解決
上記の最初の答えが正解です。あなたは32ビットCOMコンポーネントを参照する場合は、CPUに64ビットWindows上で任意のターゲットアプリケーションを実行することはできません。それはロードされません。
何が起こっていることはJITがどのCPUを見て、64ビットにアプリを宣伝していることです。しかし、そこにCOMコントロールのない64ビットバージョンはありませんので、あなたが登録されていないエラーを取得します。
これは彼らのデータベース用のMicrosoft Accessを使用する人のための大きな問題です。そこへのアクセスのない64ビットバージョンはありませんので、彼らがエラーを見たとき、彼らは(存在しない)64ビットランタイムが必要だと思います。あなたは、Accessランタイムを使用するための唯一の32ビットなどのフラグにアプリをする必要があります。
64ビット版を持って、より良い部品を見つける、または100%マネージドコードを行く -このはお粗末な選択(私見)があります。
私は、彼らが本当にそれを必要とするだけでない限り、32ビットのようにすべてのタグのアプリには好きではありません。
他のヒント
C#のアプリケーションは、x64マシン上で64ビットモードのように実行する任意のCPUターゲットでコンパイルされていてもよいです。 64ビットプロセスは、32ビットプロセスにアクセスすることはできません。
は、Visual Studioでは、32ビットのみのアプリケーションとしてコンパイルすることを強制することができます。これは、タブ、プラットフォームターゲット]ドロップダウンを作成し、プロジェクトのプロパティであります。 x86
に設定します。
があり、32ビットアプリケーションとして実行することを強制する他の方法でもよいが、私はそれらに精通していないんだことがあります。
.NETランタイムは自動的に64ビットのようなアプリケーションを実行し、それはもはやそのプロセスに32ビットCOMコンポーネントをロードできません。
これは、COMコンポーネントがオートメーション対応のインタフェースを持っている場合は回避することは非常に簡単です。 COM +アプリケーション(コントロールパネル - >管理ツール - >コンポーネントサービス)を作成し、その中にコンポーネントを追加します。この方法で、あなたは別のプロセスでのコンポーネントの作成を強制よ、あなたはもはやあなたのクライアントアプリケーションが64ビットアプリケーションとして実行することを気にしないだろう。
とは思わないを実行できますが、32bitアプリのネイティブ、64bit機です。必要なものをコンパイルをアプリとして64bit版のバイナリの実行でエミュレータ(WOW64windows).例えばシェアする画面でユーザー(ビルトでは64bitバイナリ)を使用外部性が大幅に向上し、また、64bit版のすべてのdll.
こちらは良い参考:
http://searchwindowsserver.techtarget.com/tip/0,289483,sid68_gci1220022,00.html
編集:
ばれるプロジェクトのプロパティ->の構築、変更、プラットフォームの対象から"他のCPU"をX86.この助けになっていますよ。
または登録が必要となりまdll: http://riteshk.blogspot.com/2007/05/retrieving-com-class-factory-failed-due.html