Install any skill in seconds. Free to start, no credit card required.
Get Started Free →dotnet/dotnet-pinvoke
Correctly call native (C/C++) libraries from .NET using P/Invoke and LibraryImport. Covers function signatures, string marshalling, memory lifetime, SafeHandle, and cross-platform patterns. USE FOR: writing new P/Invoke or LibraryImport declarations, reviewing or debugging existing native interop code, wrapping a C or C++ library for use in .NET, diagnosing crashes, memory leaks, or corruption at the managed/native boundary. DO NOT USE FOR: COM interop, C++/CLI mixed-mode assemblies, or pure man
Passed 21 of 22 test cases with the skill, and 14 of 22 without it.
and 4 more in the full report
7 fixed14 passed either way1 still failing0 broke
Tokens, turns and time describe resource use, not a dollar price.
One of 7 test cases the skill fixed. Same model, same prompt, with and without the skill.
I am writing a `LibraryImport` declaration in .NET 8 for the Windows API function `GetModuleFileNameW`. What string marshalling options should be configured on the attribute?
| Checked | Without skill | With skill |
|---|---|---|
| The LibraryImport attribute sets StringMarshalling to StringMarshalling.Utf16 | Passed | Passed |
| The method declaration sets SetLastPInvokeError to true | Missed | Passed |
The instructions your model reads when the skill loads.
Calling native code from .NET is powerful but unforgiving. Incorrect signatures, garbled strings, and leaked or freed memory are the most common sources of bugs — all can manifest as intermittent crashes, silent data corruption, or access violations far from the actual defect.
This skill covers both DllImport (available since .NET Framework 1.0) and LibraryImport (source-generated, .NET 7+). When targeting .NET Framework, always use DllImport. When targeting .NET 7+, prefer LibraryImport for new code. When native AOT is a requirement, LibraryImport is the only option.
[DllImport] or [LibraryImport] declaration from a C/C++ headerAccessViolationException, DllNotFoundException, or silent data corruption at the native boundaryDllImport declarations to LibraryImport for AOT/trimming compatibilityDllImport to LibraryImport unless the user asks or AOT/trimming is an explicit requirement.| Input | Required | Description |
|---|---|---|
| Native header or documentation | Yes | C/C++ function signatures, struct definitions, calling conventions |
| Target framework | Yes | Determines whether to use DllImport or LibraryImport |
| Target platforms | Recommended | Affects type sizes (long, size_t) and library naming |
| Memory ownership contract | Yes | Who allocates and who frees each buffer or handle |
Agent behavior: When documentation and native headers diverge, always trust the header. Online documentation (including official Win32 API docs) frequently omits or simplifies details about types, calling conventions, and struct layout that are critical for correct P/Invoke signatures.
test cases passed, vs 14 / 22 without
More skills from the same source and nearby in the registry, with their headline benchmark lift.