175

1台のPCで開発しているクライアント/サーバーアプリがあります。今は2つのシリアルポートが必要なので、友達からパソコンを借りました。

アプリをビルドして実行またはデバッグしようとすると(Delphi IDEまたはWindowsファイルマネージャーから)、「アプリケーションを正しく起動できませんでした(0xc000007b)」というエラーが表示されます。

グーグルはあまり表示されませんが、これはDelphi固有のものではなく、他のアプリで発生することを示しているようです。64ビットアプリから32ビットDLLを呼び出したり、その逆を行ったりしたことが原因のようです。

  • 両方のPCはWindows7、64ビットです
  • どちらにも、32ビットしか処理できないDelphiXe2スターターエディションがあります
  • アプリは私のPCでは正常に動作しますが、友人のPCでは動作しません
  • 他のDelphiアプリは、両方のPCで問題なく動作します

誰かがこれを追跡する方法について私にヒントを与えることができますか?

4

19 に答える 19

56

読み込み時間の依存関係を解決できませんでした。これをデバッグする最も簡単な方法は、DependencyWalkerを使用することです。プロファイルオプションを使用して、ロードプロセスの診断出力を取得します。これにより、障害のポイントが特定され、解決策が導き出されます。

このエラーの最も一般的な原因は、64ビットDLLを32ビットプロセスにロードしようとしていること、またはその逆です。

于 2012-05-08T07:09:18.280 に答える
12

不足しているdllです。おそらく、comポートで動作するdllには、未解決のdll依存関係があります。依存関係ウォーカーとWindowsデバッガーを使用できます。たとえば、すべてのmfcライブラリを確認します。また、nrCommlibを使用することもできます。これは、comポートを操作するための優れたコンポーネントです。

于 2012-05-08T11:58:14.850 に答える
12

ここで指定されているすべてのことを試し、さらに別の答えを見つけました。アプリケーションを32ビットDLLでコンパイルする必要がありました。ライブラリは32ビットと64ビットの両方でビルドしましたが、PATH64ビットライブラリに設定しました。アプリケーションを再コンパイルした後(コードにもいくつかの変更を加えて)、この恐ろしいエラーが発生し、2日間苦労しました。最後に、他の多くのことを試した後PATH、64ビットDLLの前に32ビットDLLを使用するように変更しました(同じ名前です)。そしてそれはうまくいった。完全を期すために、ここに追加しています。

于 2014-07-29T17:23:48.243 に答える
9

以前の回答で、依存関係ウォーカーを使用することが方法であると述べました。私の場合(私のアプリケーションはエラーコードで失敗し続けます)、依存関係ウォーカーは関連性のないいくつかのdllを示しました!

最後に、「プロファイル」メニューに移動してプロファイリングを実行できることがわかりました。アプリケーションが実行され、問題の原因となっている正確なdllで停止します。パスが原因で32ビットdllが選択されていることがわかり、修正しました。

ここに画像の説明を入力してください

于 2016-07-25T20:10:59.700 に答える
6

Microsoft VisualStudio2012を使用してクライアントサーバーアプリを開発するときに同じ問題が発生しました。

Visual Studioを使用してアプリを開発した場合は、新しい(つまり、ソフトウェアが開発されていないコンピューター)に適切なMicrosoft VisualC++再頒布可能パッケージが含まれていることを確認する必要があります。必要に応じて、Visual C ++再頒布可能パッケージの適切な年とビットバージョン(つまり、32ビットの場合はx86、64ビットの場合はx64)が必要です。

Visual C ++再頒布可能パッケージは、VisualStudioを使用して構築されたC++アプリケーションを実行するために必要なランタイムコンポーネントをインストールします。

VisualStudio2015用のVisualC++再頒布可能パッケージへのリンクは次のとおりです。

インストールされているバージョンを確認するには、[コントロールパネル]->[プログラム]->[プログラムと機能]に移動します。

このエラーを取得して修正した方法は次のとおりです。

1)コンピューターでVisualStudio2012を使用して32ビットアプリケーションを開発しました。私のコンピューターをComputerAと呼びましょう。

2)ComputerBと呼ばれる別のコンピューターに.exeと関連ファイルをインストールしました。

3)ComputerBで、.exeを実行すると、エラーメッセージが表示されます。

4)ComputerBで、プログラムと機能を確認しましたが、Visual C ++ 2012再頒布可能パッケージ(x64)が表示されませんでした。

5)ComputerBで、Visual C ++ 2012再頒布可能パッケージをグーグルで検索し、x64バージョンを選択してインストールしました。

6)ComputerBで、ComputerBで.exeを実行しましたが、エラーメッセージが表示されませんでした。

于 2015-10-12T23:15:23.953 に答える
5

最近、(シリアルポートを使用する)アプリケーションを開発していて、テストしたすべてのマシンで動作するという問題が発生しましたが、このエラーが発生する人もいました。

エラーが発生したすべてのマシンはWin7x64を実行しており、一度も更新されていなかったことがわかりました。

私の特定のケースでは、Windows Updateを実行すると、すべてのマシンが修正されました。

于 2013-11-05T21:26:35.000 に答える
3

実際、このエラーは無効な画像形式を示しています。しかし、なぜこれが起こっているのか、そしてエラーコードは通常何を意味するのでしょうか?実際、これは、64ビットのWindowsオペレーティングシステム用に作成された、または動作することを目的としたプログラムを実行しようとしているが、コンピューターが32ビットのオペレーティングシステムで実行されている場合に表示される可能性があります。

考えられる理由:

  • Microsoft Visual C ++
  • 再起動する必要があります
  • DirectX
  • 。ネットフレームワーク
  • 再インストールする必要があります
  • 管理者としてアプリケーションを実行する必要があります

ソース: http: //www.solveinweb.com/solved-the-application-was-unable-to-start-correctly-0xc000007b-click-ok-to-close-the-application/

于 2014-06-20T03:00:00.257 に答える
2

これは、デバッガーのデバッグが役立つ場合があります。基本的に、ここの手順に従うと、 2つのIDEを実行でき、一方が他方にデバッグされます。アプリケーションを1つにまとめると、他の方法では見逃してしまうエラーをキャッチできる場合があります。それは試みに値します。

于 2012-05-08T07:30:12.327 に答える
2

VisualC++がインストールされていないマシンでVC++デバッグ実行可能ファイルを実行しようとするとエラーが発生しました。リリースバージョンを作成して使用すると、修正されました。

于 2013-12-16T21:12:26.090 に答える
2

私の場合、DLLをビルドした後に(Visual Studio 2015を使用して)名前を変更したときにエラーが発生したため、DLLに依存する実行可能ファイルが期待する名前に一致します。名前を変更した後、Dependency Walkerによって表示されたエクスポートされたシンボルのリストが空になり、「アプリケーションを正しく起動できませんでした」というエラーメッセージが表示されました。

そのため、VisualStudioリンカーオプションで出力ファイル名を変更することで修正できます。

于 2016-08-10T12:27:08.987 に答える
2

これは、アプリケーションが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には、CommonControlsの素敵な歴史があります。

于 2018-06-24T13:43:01.460 に答える
2

もちろん、主な問題は、DLLファイルが見つからないか、場合によっては破損していることです。この場合、私にはかなり良いアイデアがあります(特に、DLLを手動でダウンロードしてインストールした場合)...

TLDR:手動でコピー/貼り付けしたDLLをすべて削除し、古い再配布可能インストールをアンインストールして32ビットと64ビットの両方のインストールで新しい再配布可能ファイルを再インストールします。

何をすべきか

欠落しているDLLをコピー/貼り付けするsystem32などのこのソリューションは、1990年代に思い出すことができたので以前は機能していましたが、現在は機能していないようです(2020)。したがって、最近この問題が発生した場合は、次のことをお勧めします。

  • windows\system32および内で、オペレーティングシステムが管理者として削除できるようにする、にwindows\SysWOW64一致するすべてのファイルを削除します。ms*.dll
  • Windowsで使用しているすべてのVisualC++再頒布可能パッケージをアンインストールします。これにより、「あなたはすでにこれを持っています!」を防ぎます。再インストール時に次の手順で詳しく説明するように、再インストール時にダイアログが表示されます。
  • 定期的に利用可能なダウンロードサイトから2015-2019VisualC++再頒布可能パッケージを再インストールします。これが機能しない場合は、他のものをダウンロードしてインストールしますが、個人的には、2015-2019がすべてをカバーしてくれました。 マシンに関係なく、x32パッケージとx64パッケージの両方をインストールしてください。 (すべてのダウンロードリンク:収集されたVC++ダウンロードリンク; MSVCR120.dll修正; MFC140U.dll修正。)

それが機能していることをどのように知っているか

これを経験しているコーダーには多くのバリエーションがあるため、単一の可能な解決策があるという考えはしばしば破棄されますが、前向きになりましょう!

  • 一致するms*.dllファイルの削除が機能した場合、についてのエラーは発生しなくなりますerror code 0xc000007b。代わりに、が見つからないというメッセージが表示されます.dll。これは、正しいコードパスに到達していることを示しています。
  • 再配布可能な作品をインストールする場合、特定の人気のあるDLLファイルが上記のフォルダに表示されるはずsystem32ですSysWO64。例:、、、、、、、、およびフレンズ。MSVCR120.dll_MSVCR140.dllMSVCR100.dllMSVCP100.dllMSVCP120.dllMSVCP140.dll

最後に、可能なベストチャンス

計画どおりに機能しない場合があります(Windowsの世界では誰もが知っているように)。以下もお試しいただけます!

  • Windowsで[Windowsの機能をオンまたはオフにする]タブを開きます(Windows 8-10でサポートされています)。.NET Frameworkインストールのチェックを外します。小さなインストールが通り過ぎるのがわかります。
  • システムを再起動します。上記の機能に再度移動し、再確認し.NET Frameworkて、[OK]をクリックします。これが機能する場合は、「。NETFrameworkのインストールと更新」というメッセージが表示されます。このメッセージが表示されるまでに1分ほどかかります。これが完了したら、もう一度再起動することをお勧めします。

幸運を!

于 2020-12-12T02:36:38.813 に答える
1

私の個人的なプロジェクトでこの問題を解決しました(Driesに感謝します)。私にとっては、プロジェクトのパスが長すぎたためです。.slnをより短いパス(C:/ MyProjects)に保存し、そこからコンパイルした後、エラーなしで実行されました。

于 2014-03-31T13:50:18.130 に答える
1

また、「Dependencies」をダウンロードして、wget.exeを置いたのと同じフォルダに解凍します。

http://gnuwin32.sourceforge.net/packages/wget.htm

その後、同じフォルダーにいくつかのlib * .dllファイルとwget.exeがあり、正常に動作するはずです。

(私が最初に見つけたhttps://superuser.com/a/873531/146668にも回答しました。)

于 2015-02-04T12:26:02.963 に答える
1

私はちょうどこの問題に遭遇しました。Windows10のコントロールパネルの[アプリと機能]で[C++]を検索したところ、数日前に何らかの更新が実行され、VC ++Redistributable2012-2017がインストールされていることがわかりました。エラーメッセージが表示されたアプリにはVC++2010のみが必要でした。すべてをアンインストールしてから、2010 x86 / x64だけを再インストールすると、エラーが解消され、アプリケーションは期待どおりに機能しました。

于 2017-06-07T11:57:18.350 に答える
1

これは、何らかの理由でx86リソースがx64マシンからロードされた場合に発生する可能性があります。これを明示的に回避するには、このプリプロセッサディレクティブをstdafx.hに追加します(もちろん、私の例では、問題のあるリソースはWindows CommonControlsDLLです。

#if defined(_WIN64)
#pragma comment(linker, "\"/manifestdependency:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df'\"")
#endif
于 2017-09-27T18:37:56.527 に答える
1

システムに複数のバージョンのdllがある可能性があります。システムを検索して見つけることができます。この問題は、パス内のディレクトリの順序を変更するだけで解決できる場合があります。これが私の問題でした。(Qtの外部でQt Creator GUIを実行できません。「アプリケーションを正しく起動できませんでした(0xc000007b)」エラー

于 2019-02-27T17:33:14.700 に答える
1

リポジトリからコードをフェッチして新しいマシンでコンパイルするときに、この問題が発生しました。リポジトリ全体をコピーしてからコンパイルすると、実行可能ファイルが機能しました。32ビットDLLが誤ってチェックインされなかったことが判明しました。上記の人々が述べているように、「依存関係ウォーカー」を使用して、どこで問題が発生したかを特定します。

何を探すべきかをより明確にするために、以下のスクリーンショットを参照してください。バックグラウンドでexeが間違ったDLLをロードしようとすると(「64」に注意)、「アプリケーションは正しく起動できませんでした0xc00007b」とフォアグラウンドで単純にコピーされたexe(正しいDLLが含まれています)。

依存関係ウォーカー

于 2021-06-04T08:59:24.940 に答える