2

MSDN のこのページには、この例で使用されている 3 つの関数の要約版とほぼ同じように動作する一連のファイル操作がリストされているようです。関数が Win32 API で書かれていることを行う、これらの非標準のランタイム関数の目的は何ですか?

それらは DOS との互換性のためだけのものですか? もしそうなら、なぜ64ビットサポートなどで更新されているのですか?

4

4 に答える 4

3

_findfirst と _findnext を呼び出す 16 ビット Windows からインポートするコードがある場合は、それらを引き続き使用してもかまいません。それ以外の場合は、API を使用してください。

C ランタイム ソース コード (VC++ に含まれています) を見ると、_findfirst が FindFirstFile などを呼び出していることがわかります。

ソース

性能比較はこちらのサイトのグラフも合わせてご覧ください。Win32 API の FindFirstFile バリアントはより効率的です。警告: サイト自体は英語ではありませんが、グラフは理にかなっています。

于 2009-03-15T15:00:36.717 に答える
3

おそらく、生の Win32 API を使用して克服できる重要なこと (おそらく唯一のこと) は、デバッグ ビルドで CRT が何らかの検証を実行することです (ソースを見てください - そこにはかなりの数の検証アサーションがスローされています)。 )。

また、OS API をラップすることの何が問題になっているのでしょうか?

于 2009-03-15T15:39:54.597 に答える
2

C ランタイム関数は、失敗時にerrnoを設定するなどのことも行います。これは、Win32 とは異なるエラー メカニズムです。

コードは別の DLL にも存在します。別の DLL をロードしたくないという理由で、実際に CRT を使用しないプログラムを作成しようとした人がいたこともあります。

于 2009-03-15T15:41:16.917 に答える
1

それは「歴史」と呼ばれます - Windows のようなものを作るとき、古い機能を捨てることは許されません。なぜなら、それは既存のプログラムを破壊するからです。

それらの 1 つのセットは「C」関数のように見え、もう 1 つは「Win32」関数のように見えます。好きな方を使用できます。

于 2009-03-15T14:46:50.230 に答える