11

言い換えれば、.NET Frameworkは最終的にどこかで呼び出しを行って作業を完了しますか?または、Microsoftは.NETFrameworkでwin32ライブラリのすべての機能を完全に再作成しましたか。

ありがとう!

4

7 に答える 7

17

ミックスです。明らかに、winformsのようなものは主にWin32機能(または両方の世界の組み合わせ)のラッパーですが、WPFははるかに管理されています(実際の制御コードの観点から;内部では、Mashが指摘しているように、DirectXを使用する場合がありますレンダリング)。同様に、ファイル/ネットワークアクセスのようなものは、OSオブジェクトのラッパーであり、アンマネージドロックオブジェクトのようなものも同様ですMutexが、他の多くのものは100%管理されています。

したがって、それは単純な答えではありません。

(編集)また、「。NET」は非常にあいまいな用語であることに注意してください。Compact Framework、Micro Framework、Silverlightなどには、win32以外のさまざまな実装がある場合があります。

于 2009-04-27T08:13:27.107 に答える
6

.NETアプリケーションは単なる別のWin32プロセスであるため、魔法はなく、明らかに下線付きのオペレーティングシステムを使用します。.NETライブラリでさえWin32をかなりの程度使用しています。

例:

  • メモリ管理はマネージコードに対して内部的に処理されますが、プロセス自体については、他のWin32プロセスと同じように処理されます。

  • 現在管理されているスレッドは、OSスレッドとしても実装されています。

于 2009-04-27T08:12:19.370 に答える
6

更新:私が間違った質問に答えたことに気づきました(クラスライブラリではなくランタイムと言いました)...まあ、とにかく以下のガフを維持します!

ライブラリの部分によって異なります。

  • System.XmlライブラリはMSXMLを使用しません
  • System.Reflectionは、すべてILベースであるため、機能しません。
  • System.Textは、実行しますし、実行しません。文字列操作のためのいくつかの「高速」呼び出しがあります
  • System.Text.RegularExpressionsは、XML名前空間のように、RegexRunner内部クラスを使用するすべてのカスタムではありません。
  • System.Diagnosticsは、CreateProcessなどのkernel32.dll呼び出しを使用します
  • System.IO名前空間もピンボークします
  • System.Threadingは、最終的に(CLR内で)winapiメソッドを呼び出す内部メソッド呼び出しを使用します
  • System.Windows.Formsは混合物ですが、最終的にはGDIを使用します
  • System.Net(NetworkStream)は、WSARecv(..)などのws2_32.dllを使用します

それはReflectorをいじっただけです。明らかにCOMサーバーであるため、MicrosoftCLRはwin32にも大きく依存しています。

于 2009-04-27T08:51:46.670 に答える
5

場合によっては(ほとんどの場合、おそらく?フレームワーク全体に反映されていません)、.NETフレームワークはwin32を呼び出します。ほとんどのコントロールは単純にwin32です-いくつかの新機能でラップされたコントロール。

于 2009-04-27T08:11:06.363 に答える
3

はい、内部でwin32関数を呼び出します。たとえば、FileクラスのOpenReadメソッドには次のものが含まれます。

    return new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read);

そしてそれは最終的に呼び出すでしょう:

    SafeFileHandle handle = CreateFile(lpFileName, dwDesiredAccess, dwShareMode, securityAttrs, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile);

これはwin32ネイティブ関数であり、メソッドの奥深くにあります。

于 2009-04-27T08:14:29.710 に答える
2

Monoは.netランタイムの実装であり、win32関数呼び出しにマップされません(少なくともLinuxでは)

あなたの質問は、Microsoftによる.netランタイムの実装に関するものだったと思います。

于 2009-04-27T11:05:10.797 に答える
1

すべてのWindowsアプリケーションと同様に、.NETAPIを呼び出します。しかし、それは単なるラッパーやマップではなく、抽象化としてより正確に記述されています。

于 2009-04-27T08:31:31.680 に答える