How do you call unmanaged code in C#?
๐ก Concept: Calling Unmanaged Code in C#
Calling unmanaged code allows C# programs to use functions written in native languages like C or C++, using platform invocation services (P/Invoke).
๐ Quick Intro
P/Invoke enables managed code to call unmanaged functions from DLLs, facilitating interoperability.
๐ง Analogy
Imagine C# as speaking English and unmanaged code as speaking a foreign language; P/Invoke acts as the translator enabling communication.
๐ง Technical Explanation
- โ๏ธ Use
[DllImport]
attribute to specify external DLL functions. - ๐งฉ Marshaling converts data types between managed and unmanaged memory.
- ๐ Requires careful memory and resource management.
- ๐ Commonly used for accessing Windows API or legacy libraries.
- ๐ Supports calling C functions, COM components, and native DLLs.
๐ฏ Use Cases
- โ Accessing OS-level APIs not available in .NET.
- โ Integrating legacy native code.
- โ Performance-critical operations with native code.
- โ Using hardware or device-specific functions.
๐ป Code Example
using System.Runtime.InteropServices;
public class NativeMethods {
[DllImport(""user32.dll"", CharSet = CharSet.Unicode)]
public static extern int MessageBox(IntPtr hWnd, string text, string caption, uint type);
}
public class Program {
public static void Main() {
NativeMethods.MessageBox(IntPtr.Zero, ""Hello from unmanaged code!"", ""PInvoke Example"", 0);
}
}

โ Interview Q&A
Q1: What is P/Invoke?
A: Platform Invocation for calling unmanaged DLL functions.
Q2: Why use unmanaged code?
A: For legacy or OS-level functionality.
Q3: What is marshaling?
A: Data conversion between managed and unmanaged memory.
Q4: Can you call unmanaged COM components?
A: Yes, with appropriate interop.
Q5: Is memory management automatic?
A: No, requires careful handling.
Q6: What attribute is used for DLL imports?
A: [DllImport]
Q7: Can P/Invoke cause security issues?
A: Yes, if unmanaged code is unsafe.
Q8: Is P/Invoke cross-platform?
A: Mostly Windows-focused but .NET Core supports other OS.
Q9: How do you handle strings in P/Invoke?
A: Specify CharSet and marshaling rules.
Q10: Can you call 64-bit unmanaged code?
A: Yes, with correct platform targeting.
๐ MCQs
Q1. What is P/Invoke?
- Platform Invocation
- Platform Integration
- Platform Isolation
- Platform Interchange
Q2. Why use unmanaged code?
- To slow programs
- Access legacy or OS APIs
- For testing
- None
Q3. What is marshaling?
- Data destruction
- Data conversion
- Data compression
- Data encryption
Q4. Can you call COM components?
- No
- Yes
- Sometimes
- Never
Q5. Is memory management automatic?
- Yes
- No
- Sometimes
- Always
Q6. Attribute for DLL imports?
- [DllImport]
- [MarshalAs]
- [Unmanaged]
- [DllExport]
Q7. Can P/Invoke cause security issues?
- No
- Yes
- Maybe
- Never
Q8. Is P/Invoke cross-platform?
- Only Linux
- Mostly Windows
- Only Mac
- All OS
Q9. How to handle strings in P/Invoke?
- Use CharSet
- Ignore
- Convert manually
- Don't use strings
Q10. Can you call 64-bit unmanaged code?
- No
- Yes
- Maybe
- Only 32-bit
๐ก Bonus Insight
Using unmanaged code expands .NET capabilities but requires careful interop and security considerations.
๐ PDF Download
Need a handy summary for your notes? Download this topic as a PDF!