質問

私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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top