What is P/Invoke?
๐ก Concept: P/Invoke (Platform Invocation)
P/Invoke is a service that enables managed code in C# to call unmanaged functions implemented in DLLs.
๐ Quick Intro
Allows interoperability with native code by declaring external functions with DllImport attribute.
๐ง Analogy
Like using a translator to communicate with someone speaking a different language.
๐ง Technical Explanation
- Functions are declared with [DllImport] specifying the DLL and entry point.
- Supports marshaling data types between managed and unmanaged environments.
- Enables calling Win32 APIs, legacy libraries, and hardware interfaces.
- Requires careful handling of memory and exceptions.
- Essential for extending .NET capabilities.
๐ฏ Use Cases
- โ Accessing Windows API functions.
- โ Integrating with legacy native DLLs.
- โ Performance-critical operations.
- โ Hardware interaction.
๐ป Code Example
using System.Runtime.InteropServices;
class NativeMethods {
[DllImport(""kernel32.dll"")]
public static extern int GetCurrentThreadId();
}
class Program {
static void Main() {
int threadId = NativeMethods.GetCurrentThreadId();
Console.WriteLine($""Current Thread ID: {threadId}"");
}
}

โ Interview Q&A
Q1: What is P/Invoke?
A: Service for calling unmanaged DLL functions.
Q2: How do you declare a P/Invoke method?
A: Using [DllImport] attribute.
Q3: What kind of data needs marshaling?
A: Strings, structs, arrays, pointers.
Q4: Can P/Invoke call C++ methods?
A: Only if exposed with C linkage.
Q5: What are common pitfalls?
A: Incorrect signatures, memory leaks.
Q6: Is exception handling automatic?
A: No, must be handled carefully.
Q7: Which namespace is used?
A: System.Runtime.InteropServices.
Q8: Can P/Invoke be used in .NET Core?
A: Yes, with some platform restrictions.
Q9: What alternatives exist?
A: COM Interop, C++/CLI.
Q10: Why use P/Invoke?
A: To extend .NET with native code.
๐ MCQs
Q1. What is P/Invoke?
- Calling managed code
- Calling unmanaged DLLs
- Debugging
- Profiling
Q2. How to declare P/Invoke?
- [DllImport] attribute
- Marshal class
- Namespace
- Assembly info
Q3. What data needs marshaling?
- Integers
- Strings and structs
- Booleans
- Enums
Q4. Can P/Invoke call C++?
- No
- Yes, if exposed as C functions
- Sometimes
- Rarely
Q5. Common pitfalls?
- Syntax errors
- Memory leaks
- Compilation errors
- Linker errors
Q6. Is exception handling automatic?
- Yes
- No
- Sometimes
- Rarely
Q7. Namespace used?
- System.IO
- System.Runtime.InteropServices
- System.Net
- System.Xml
Q8. P/Invoke in .NET Core?
- No
- Yes
- Sometimes
- Never
Q9. Alternatives to P/Invoke?
- Reflection
- Serialization
- COM Interop
- Attributes
Q10. Why use P/Invoke?
- For testing
- Extend .NET with native code
- Debugging
- Profiling
๐ก Bonus Insight
P/Invoke is crucial for interoperating with native Windows APIs and legacy code.
๐ PDF Download
Need a handy summary for your notes? Download this topic as a PDF!