私は1台のPC上で開発してきたクライアント/サーバーアプリケーションを持っています。今、それは2つのシリアルポートを必要とするので、私は友人からPCを借りました。
アプリケーションをビルドして実行またはデバッグしようとすると(Delphi IDEから、またはWindowsのファイルマネージャから)、 "アプリケーションを正しく起動できませんでした(0xc000007b)"と表示されます。
グーグルはあまり起動しませんが、これはDelphi特有のものではなく、他のアプリでも起こることを示しているようです。 64ビットアプリから32ビットDLLへの呼び出し、またはその逆が原因と考えられます。
これを追跡する方法について誰かが私にヒントを与えることができますか?
まず始めに、 依存関係ウォーカー を使用して、アプリケーションとその依存関係の間に問題があるかどうかをテストすることをお勧めします。
ロード時間依存関係を解決できませんでした。これをデバッグする最も簡単な方法は、 Dependency Walker を使用することです。ロードプロセスの診断出力を取得するには、Profileオプションを使用します。これは失敗のポイントを識別し、解決策を導きます。
このエラーの最も一般的な原因は、64ビットDLLを32ビットプロセスにロードしようとしている、またはその逆です。
それは行方不明のdllです。おそらく、COMポートで動作するあなたのDLLは未解決のDLL依存関係を持っています。依存関係ウォーカーとウィンドウズデバッガーを使用できます。たとえば、mfcライブラリをすべてチェックします。また、あなたはnrCommlibを使うことができます - それはCOMポートを扱うための素晴らしいコンポーネントです。
ここで指定したことをすべて試したところ、さらに別の回答が見つかりました。私は自分のアプリケーションを32ビットDLLでコンパイルしなければなりませんでした。私はライブラリを32ビットと64ビットの両方でビルドしましたが、PATH
を64ビットライブラリに設定しました。私は自分のアプリケーションを再コンパイルした後(私のコードにも多くの変更を加えて)、この恐ろしいエラーに遭遇し、2日間苦労しました。最後に、他の多くのことを試した後、私はPATH
を64ビットDLLの前に32ビットDLLを持つように変更しました(それらは同じ名前を持ちます)。そしてそれはうまくいった。完全を期すためにここに追加しています。
私は最近(シリアルポートを使った)アプリケーションを開発しているところで問題を抱えていました、そしてそれは私がそれをテストしたすべてのマシンで動作しました、しかし少数の人々はこのエラーを得ていました。
それはエラーが起こったすべてのマシンがWin7 x 64を実行していて、決して一度も更新されていなかったことが判明しました。
私の特定のケースでは、Windowsアップデートを実行してすべてのマシンを修正しました。
Microsoft Visual Studio 2012を使用してクライアントサーバーアプリケーションを開発するときにも、同じ問題が発生しました。
アプリの開発にVisual Studioを使用した場合は、新しい(つまり、ソフトウェアが開発されていないコンピュータ)に適切なMicrosoft Visual C++再頒布可能パッケージがあることを確認する必要があります。適切であれば、Visual C++再頒布可能パッケージの適切な年とビットバージョン(32ビットの場合はx86、64ビットの場合はx64)が必要です。
Visual C++再頒布可能パッケージは、Visual Studioを使用して構築されたC++アプリケーションを実行するために必要なランタイムコンポーネントをインストールします。
これは、 Visual Studio 2015用に再配布可能な(= = --- ==)Visual C++へのリンクです 。
コントロールパネル - >プログラム - >プログラムと機能と進んでインストールされているバージョンを確認することができます。
これは私がこのエラーを得て、それを修正した方法です:
1)私のコンピューターでVisual Studio 2012を使用して32ビットアプリケーションを開発しました。私のコンピュータをComputerAと呼びましょう。
2).exeと関連ファイルを別のコンピューターにインストールしました。コンピューターBと呼びます。
3)ComputerBで、私は.exeを実行し、エラーメッセージを得ました。
4)ComputerBで、私はプログラムと機能を見たが、Visual C++ 2012再頒布可能(x64)を見なかった。
5)ComputerBで、私はVisual C++ 2012再頒布可能パッケージを検索し、x64バージョンを選択してインストールしました。
6)ComputerBで、ComputerBで.exeを実行しましたが、エラーメッセージが表示されませんでした。
実際、このエラーは無効な画像フォーマットを示しています。しかし、なぜこれが起こっているのか、そしてエラーコードが通常何を意味するのか?実際には、64ビットWindowsオペレーティングシステム用に作られた、または動作するように意図されたプログラムを実行しようとしているが、お使いのコンピュータが32ビットオペレーティングシステムで実行されている場合に発生します。
考えられる理由:
私の場合、(Visual Studio 2015を使用して)ビルドした後でDLLの名前を変更したときにエラーが発生したため、DLLに依存する実行可能ファイルで予期される名前に適合します。 Dependency Walkerによって表示されたエクスポートされたシンボルのリストの名前変更が空になり、「アプリケーションを正しく起動できませんでした」というエラーメッセージが表示されました。
そのため、Visual Studioのリンカオプションで出力ファイル名を変更することで修正できます。
アプリケーションがMicrosoft.Windows.Common-Controlsアセンブリに依存していることを明示しようとしている場合は、これを使用できます。これは、ビジュアルスタイルが共通コントロールに適用されるように、共通コントロールライブラリのバージョン6をロードするときに行います。
あなたはおそらくWindowsのXPからMicrosoftの元々のドキュメントのやり方に従い、あなたのアプリケーションのマニフェストに以下を追加したでしょう:
<!-- Dependancy on Common Controls version 6 -->
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="X86"
publicKeyToken="6595b64144ccf1df"
language="*"/>
</dependentAssembly>
</dependency>
Windows XPはOSではなくなり、32ビットアプリケーションではなくなりました。 17年間の間に Microsoftはドキュメントを更新しました 。それでは、マニフェストを更新しましょう。
<!-- Dependancy on Common Controls version 6 -->
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"/>
</dependentAssembly>
</dependency>
Raymond Chenには、Common Controlsの素晴らしい歴史があります。
Visual C++がインストールされていないマシンでVC++デバッグ実行可能ファイルを実行しようとしたときにエラーが発生しました。リリースバージョンを構築し、それを使用してそれを修正しました。
これはデバッガをデバッグすることが役に立つかもしれないケースであるかもしれません。基本的にここで の指示に従うと 、2つのideを実行することができ、一方はもう一方に対してデバッグすることができます。アプリケーションを1つにアンインストールすると、他の方法で見逃したエラーを見つけることができます。それは試みに値します。
また、「Dependencies」をダウンロードし、wget.exeを置いたのと同じフォルダーに解凍します。
http://gnuwin32.sourceforge.net/packages/wget.htm
その後、同じフォルダーにwget.exeと同様にいくつかのlib * .dllファイルがあり、それはうまく機能するはずです。
(私もここで答えました https://superuser.com/a/873531/146668 私が最初に見つけたものです。)
システムに複数のバージョンのdllがある可能性があります。あなたが見つけるためにあなたのシステムを検索することができます。パスのディレクトリの順番を変えるだけで問題は解決するかもしれません。これは私の問題でした。 ( Qtの外でQt Creator GUIを実行できません。「アプリケーションを正しく起動できませんでした(0xc000007b)」エラー )
私の個人的なプロジェクトのためにちょうどこの問題を解決しました(そのためのDriesに感謝します)。私にとっては、プロジェクトパスが長すぎたためです。 .slnを短いパス(C:/ MyProjects)に保存し、そこからコンパイルした後、エラーなく実行されました。
私はこの問題に遭遇しました。私はWindows 10のコントロールパネルで私の "Apps&Features"の下で "C++"を検索しましたが、数日前に何らかのアップデートが実行されVC++再配布可能な2012-2017をインストールしたことに気づきました。エラーメッセージが表示されたのはVC++ 2010のみでした。それらすべてをアンインストールした後、2010 x86/x64のみを再インストールしたところ、エラーは解消され、アプリケーションは正常に機能しました。
これは、何らかの理由でx86リソースがx64マシンからロードされた場合に発生する可能性があります。これを明示的に回避するには、このプリプロセッサディレクティブをstdafx.hに追加します(もちろん、この例では問題のあるリソースはWindows Common Controls DLLです)。
#if defined(_WIN64)
#pragma comment(linker, "\"/manifestdependency:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='AMD64' publicKeyToken='6595b64144ccf1df'\"")
#endif