0

const stringデータが実行可能ファイルにどのように保存されたかについての別の質問に答えると、質問が発生しました。実行時エラーメッセージがOSによって生成されるのではなく、実行可能ファイルに保存されるのはなぜですか。

!This program cannot be run in DOS mode.
合理的なようですが、DOSが新しいWindowsアプリを検出し、適切なエラーメッセージを生成することは期待できません。プログラムがOS機能と確実に通信できない状態にある場合、スタックフレームの破損に関するその他の問題も発生する可能性があります

しかし、意味をなさないものもあり
- Attempt to use MSIL code from this assembly during native code initialization...etc..
ます。.Netアセンブリを呼び出そうとした場合(これは純粋なC ++コードではありません)、.NetまたはOSランタイムはエラーメッセージ自体を生成することができます。

また、ファイルシステムのエラーメッセージもexeファイルに含まれています。確かに、これらのエラーは実行時にOSによって生成されるようにしたいです-アプリが英語以外のバージョンのWindowsで実行されている場合、システムエラーに、コンパイルに使用した言語ではなく、その言語を反映させたくありませんか?

金曜日の午後のような質問ですが、レイモンド・チェンのサイトには何も書かれていないようです。

4

3 に答える 3

1

The examples I know of are stubs that are placed specifically because there isn't a good way for the OS or some runtime to produce the error. Also, they are fundamental problems with the implementation, not the types of errors a user should ever see.

The DOS one is a perfect example. There's no way for DOS to recognize a Windows program and produce a reasonable error, so the stub code is included in Windows programs.

Your MSIL one is very similar. How can the runtime produce this error if the runtime isn't actually loaded (because the program is still initializing)?

Another example I can think of are "Pure virtual function called" in C++ programs. The abstract base class vtables are filled with stubs that emit this message. I suppose they could be stubs that make an OS call to produce the same message, but that seems like overkill for something that's never supposed to happen.

There's a similar problem if you try to call into the floating point library from a native C or C++ program that isn't actually linked against the floating point library. This is essentially a floating-point implementation detail of the language runtime library (in cooperation with the compiler and the linker). It's not an OS-level issue (in the sense that something like "file not found" is).

于 2012-06-08T17:57:13.747 に答える
0

これは、アプリケーションをグローバル化できるようにするためです。

たとえば、Ivanは、フランス語のOSで実行されている場合でも、ロシア語でエラーメッセージを表示することがあります。

于 2012-06-08T16:25:35.810 に答える
0

これはCRTによって取り込まれたコードだと思います。デフォルトのライブラリとリンクしないテストアプリケーションをコンパイルし、エントリポイントとしてmainCRTstartupを使用してみてください。そうすれば、唯一の文字列はDOSスタブのエラーメッセージになります。

于 2012-06-08T16:48:00.553 に答える