標準ライブラリにアクセスすると、.NETフレームワーク自体がアンマネージDLLに依存していますか?たとえば、私はメソッドAを呼び出し、そのフードの下でメソッドAまたはそのメソッドA内の他のメソッドはアンマネージドDLLに対してPInvokeを実行しますか?標準.NETライブラリは、アンマネージDLLに依存しますか?
答えて
はい、.Netライブラリはアンマネージ機能を多く使用します。ライブラリが呼び出すことができるアンマネージ関数(私が知っている)には、Framework自体のメソッドと、PInvokeを使用する他のDLLのメソッドの2種類があります。
フレームワークに実装されているメソッドには、[MethodImpl(MethodImplOptions.InternalCall)]
とマークされています。他のアンマネージDLLからのものには[DllImport]
とマークされています。
私のバージョンのmscorlib.dllだけでは、フレームワークによって内部的に実装された7241メソッド(ゲッターのstring.Length
など)とアンマネージドDLLからの535(多くは内部クラスWin32Native
です) 。
もちろん、フレームワークには、基礎となるWindows APIへの無数の呼び出しが含まれています。 File.Moveの逆コンパイルコードを見て:あなたが見ることができるように
[SecuritySafeCritical]
public static void Move(string sourceFileName, string destFileName)
{
if (sourceFileName == null)
{
throw new ArgumentNullException("sourceFileName", Environment.GetResourceString("ArgumentNull_FileName"));
}
if (destFileName == null)
{
throw new ArgumentNullException("destFileName", Environment.GetResourceString("ArgumentNull_FileName"));
}
if (sourceFileName.Length == 0)
{
throw new ArgumentException(Environment.GetResourceString("Argument_EmptyFileName"), "sourceFileName");
}
if (destFileName.Length == 0)
{
throw new ArgumentException(Environment.GetResourceString("Argument_EmptyFileName"), "destFileName");
}
string fullPathInternal = Path.GetFullPathInternal(sourceFileName);
new FileIOPermission(FileIOPermissionAccess.Write | FileIOPermissionAccess.Read, new string[] { fullPathInternal }, false, false).Demand();
string dst = Path.GetFullPathInternal(destFileName);
new FileIOPermission(FileIOPermissionAccess.Write, new string[] { dst }, false, false).Demand();
if (!InternalExists(fullPathInternal))
{
__Error.WinIOError(2, fullPathInternal);
}
if (!Win32Native.MoveFile(fullPathInternal, dst))
{
__Error.WinIOError();
}
}
すると、ゲーム終了時に、我々はWin32Native.MoveFileへの呼び出しを持っています。以下のように定義されて ...
[DllImport("kernel32.dll", CharSet=CharSet.Auto, SetLastError=true)]
internal static extern bool MoveFile(string src, string dst);
Frameworkクラスライブラリは、P /の多くは、異なるWindows API DLLを呼び出しに対して使用しています。たとえば、多くのDllImportを含むmscorlibの内部クラスMicrosoft.Win32.Win32Nativeを参照してください。たとえば、System.IO.FileStream.Readは最終的にWin32.ReadFileを使用します。
System.Runtime.CompilerServices.MethodImplOptions列挙型を見ると、Unmanagedフラグが設定されています。カントは本当にそれがどこで使われているかを見つける。
namespace System.Runtime.CompilerServices
{
[Flags]
[ComVisible(true)]
[Serializable]
public enum MethodImplOptions
{
Unmanaged = 4,
ForwardRef = 16,
PreserveSig = 128,
InternalCall = 4096,
Synchronized = 32,
NoInlining = 8,
NoOptimization = 64,
}
}
- 1. .NET標準ライブラリ1.6.0 .NETコアアプリケーションへの依存
- 2. .NET標準ライブラリと.NET標準
- 3. msbuild builderror for .net標準ライブラリ
- 4. Xamarin with .NET標準ライブラリ
- 5. System.Runtime.CompilerServices in .NET標準ライブラリ
- 6. NET標準ライブラリ参照.NETCore
- 7. リファレンスシステムナゲットfrom .net標準ライブラリ
- 8. パッケージ.NET標準ライブラリ(Nugetパッケージ)すべてのプロジェクト依存関係/参照
- 9. マネージドDLLをアンマネージC++プロジェクトに依存するように追加
- 10. .Net標準ライブラリはWindows7 WPFアプリケーションをサポートしていますか?
- 11. .NETコアと標準.NETライブラリのパフォーマンス
- 12. Eigenの実装は標準コンテナに依存しますか?
- 13. .Net標準プロジェクトの.Net Coreライブラリを使用します。
- 14. Azure IOTライブラリでXamarin.Forms .Net標準アプリケーションを作成しますか?
- 15. .netコア/標準のパッケージ依存性を減らす
- 16. Intellitestは.NET標準ライブラリで使用できますか?
- 17. ユニットの内部テストVS2017 .Net標準ライブラリ
- 18. .Net標準ライブラリへのbindingRedirectの追加
- 19. .NET標準ライブラリのXamarin.Androidアセンブリの参照
- 20. .NETでアンマネージdll例外をキャッチ
- 21. アンマネージC++ DLL依存関係はアプリケーションフォルダにコピーされませんが、異なるマネージdllは
- 22. msvcp90.dllは間違ったmsvcr90.dllに依存しますか?
- 23. 追加の依存関係/ DLL /ライブラリ
- 24. Lua DLLライブラリの依存関係
- 25. .NET Core XUnitプロジェクトからの標準DLLの参照
- 26. 標準ライブラリにstd :: identityが存在しない理由はありますか?
- 27. Roslyn CSharpCompilationを使用して.NET標準2.0 DLLを生成
- 28. .NET DLL参照/依存関係チェックユーティリティ
- 29. python標準ライブラリ
- 30. 依存関係を解決しようとしています:.NET標準ライブラリをNETコアに変更する - Microsoft.Extensions.Primitives