倉庫のアドレスhttps//github.com/dahall/Vanara
砂漠の果ての波

Windows APIの非常に使いやすく、非常によくカプセル化された. NETライブラリのシリーズは、面倒なWindows API変換関数を書く必要はほとんどありません。
このプロジェクトには、WindowsライブラリからP/Invoke関数、インタフェース、列挙、構造体を含むさまざまな. NETアセンブリが含まれています。各アセンブリは1つ以上の密接に関連するライブラリに関連している。たとえば、Shlwapi.dllにはShlwapi.libからエクスポートされたすべての関数が含まれ、Kernel32.dllにはKernel32.libとkernelbase.libのすべてが含まれます。
所有程序集都可通过 NuGet 获得,并提供针对.NET 2.0、3.5、4.0、4.5、Core 3.0、Core 3.1 和.NET 5.0(v3.2.20 中新增)的版本,并支持SourceLink。在依赖项不允许的所有情况下,.NET Standard 2.0、.NET Core 2.0 和 2.1 版本也包含在 UWP 和其他.NET Core 及标准项目中。
在充分测试之后,这个项目每隔几周发布一次新版本。新的版本和发行说明一起被编目在Releases部分,所有 NuGet 包都发布到nuget.org。每个 GitHub 推送都会触发AppVeyor构建。所有者感谢他们的免费开源账户!文章开头显示了项目构建状态信息。AppVeyor 源用于构建 NuGet 包。
どう使う?
- Microsoftドキュメントで必要な関数を検索します。関数がどのライブラリまたはDLLにあるかに注意してください。
- 以下のサポートライブラリ表を参照して、Vanaraのインベントリがあり、必要な機能Windows APIがあることを確認します。アセンブリのリンクをクリックすると、アセンブリのカバレッジがわかります。関数を探し、一致する実装があれば右側に表示されます。GitHubのプロジェクト検索(ページの左上)を使用して、関数、メソッド、定数を検索することもできます。[このリポジトリ内]が選択されていることを確認してください。
- NuGet経由でプロジェクトにアセンブリを追加する。
- この機能を使用するには、次の操作が可能です。
-
- 直接调用
var bret = Vanara.PInvoke.Kernel32.GetComputerName(sb, ref sbSz);
- 直接调用
-
- C#6.0以降では、static usingディレクティブを使用して呼び出します。
using static Vanara.PInvoke.Kernel32;
var bret = GetComputerName(sb, ref sbSz);
5.場合によっては、特にセキュリティ、システムサービス、フォーム、シェルのために、[サポートアセンブリ]の1つに対応するヘルパー/ラッパークラスがあります。各ライブラリのページに移動し(セクション内のリンクをクリックして)、各ライブラリに含まれるクラスを参照します。
デザインの理念
- 単一のDLLからインポートされたすべての関数は、DLLという名前の単一のアセンブリに配置する必要があります。
- (例如,程序集
Vanara.PInvoke.Gdi32.dll承载系统目录中从gdi32.dll导出的所有函数和支持的枚举、常量和结构。)
- (例如,程序集
- 任何由许多库使用的结构、宏或枚举(非函数)都会放入
Vanara.Core或'Vanara.PInvoke.Shared`库中。- (例如,宏
HIWORD'和结构SIZE都在Vanara.PInvoke.Shared中,简化互操作调用和本机内存管理的类都在'Vanara.Core中)
- (例如,宏
- プロジェクト内では、すべての構造はヘッダーファイル(*.h)という名前のファイルに含まれており、これらの構造はWindows APIで定義されています。
- (例如,在
Vanara.PInvoke.Kernel32项目目录中,您将分别找到一个 FileApi.cs、WinBase.cs 和一个 WinNT.cs 文件,分别表示 FileApi.h、WinBase.h 和 WinNT.h)
- (例如,在
- 構造体や関数を直接解釈するとメモリリークや誤用になる場合は、その使い方を簡素化しようとしました。
- 在结构体总是通过引用传递,并且在需要清理内存分配的地方,我将结构体更改为实现
IDispoable的类。 - 尽可能,所有句柄都已转换为以 Windows API 句柄命名的
SafeHandle派生工具。如果这些句柄需要调用函数以释放/关闭/销毁,则存在一个派生的SafeHANDLE,该函数将在 disposal 时执行该函数。- 例如,定义了
HTOKEN。SafeHTOKEN在该句柄上调用CloseHandle自动释放。
- 例如,定义了
- 可能な限り、呼び出し元が解放したメモリを割り当てるすべての関数は、安全なメモリハンドルを使用します。
- 程序集中所有 PInvoke 调用都以'Vanara.PInvoke`为前缀。
- 如果要将结构体作为常量传递到函数中,则使用
in语句封装该结构体,该语句将通过引用传递结构体,而不需要ref关键字。- Windows API:
BOOL MapDialogRect(HWND hDlg, LPRECT LPRECT) - Vanara:
bool MapDialogRect(HWND hDlg, in RECT lpRect);
- Windows API:
- PInvokeを使用して呼び出されるクラスや拡張がある場合、それらは'Vanara'のプレフィックスを持ち、その後に関数の論理名が続くラッパーアセンブリにあります。現在では、Core、Security、SystemServices、Windows.Forms、Windows.Shellとなっている。
サポートされる図書館





サポートされるアセンブリ

リンク一覧
サンプルコード。
There are numerous examples in the UnitTest folder and in the WinClassicSamplesCS project that recreates the Windows Samples in C# using Vanara.