用途:帮助 .NET 开发者正确调用原生(C/C++)库,避免签名错误、字符串乱码、内存泄漏或释放错误导致的崩溃与数据损坏。
主要能力:覆盖 DllImport(.NET Framework 1.0+)与 LibraryImport(.NET 7+ 源生成,AOT/裁剪安全);原生类型到 .NET 类型映射(如 C long 用 CLong、size_t 用 nuint/UIntPtr、Win32 BOOL 用 int、bool 需显式 MarshalAs);字符串编码显式指定(Windows 用 UTF-16 的 W 变体,跨平台 C 库通常 UTF-8,禁用 CharSet.Auto);内存所有权模型(调用方分配/释放、被调方分配/调用方释放、句柄式);SafeHandle 封装原生句柄;SetLastError/SetLastPInvokeError 与 HRESULT 错误处理;回调(.NET 8+ 优先 UnmanagedCallersOnly,旧目标用委托并保持根引用);跨平台库加载(条件编译或 NativeLibrary.SetDllImportResolver);DllImport 迁移到 LibraryImport 的步骤与 SYSLIB1054–SYSLIB1057 分析器告警修复。
使用方式:依据原生头文件或文档、目标框架、目标平台与内存所有权约定作为输入;按选择声明方式、映射类型、编写声明、处理字符串、确定内存所有权、使用 SafeHandle、处理错误、处理回调的流程操作。文档与头文件冲突时以头文件为准。仅 Windows x86 需显式调用约定。
适用场景:从 C/C++ 头文件编写新声明、审查 P/Invoke 签名、封装整个 C 库、调试 AccessViolationException/DllNotFoundException/静默数据损坏、为 AOT/裁剪迁移、诊断原生句柄或缓冲区的内存泄漏与堆损坏。
限制:不迁移现有 DllImport 除非用户要求或明确需要 AOT/裁剪;非 Win32 目标不推荐 CsWin32;无函数指针需求时不生成回调;审查请求只做校验不重写可用代码。工具方面,Win32 可用 Microsoft.Windows.CsWin32,WinRT 用 CsWinRT,Objective-C 用 Objective Sharpie。具体收费、价格与平台支持细节暂未提供。