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!

๐Ÿ” Navigation

Learn More About C# ๐Ÿ“š

1. What is C#? ๐Ÿ‘‰ Explained
2. Main Features of C# ๐Ÿ‘‰ Explained
3. Difference Between C# and Java ๐Ÿ‘‰ Explained
4. Common Language Runtime (CLR) in C# ๐Ÿ‘‰ Explained
5. Common Type System (CTS) in C# ๐Ÿ‘‰ Explained
6. Common Language Specification (CLS) in C# ๐Ÿ‘‰ Explained
7. Value Types vs Reference Types in C# ๐Ÿ‘‰ Explained
8. What is a Namespace in C#? ๐Ÿ‘‰ Explained
9. Purpose of the 'using' Keyword in C# ๐Ÿ‘‰ Explained
10. Different Data Types in C# ๐Ÿ‘‰ Explained
11. Difference Between int and Int32 in C# ๐Ÿ‘‰ Explained
12. Difference Between float, double, and decimal in C# ๐Ÿ‘‰ Explained
13. What is the Default Value of a Boolean in C#? ๐Ÿ‘‰ Explained
14. What is Boxing and Unboxing in C# ๐Ÿ‘‰ Explained
15. What are the Different Types of Operators in C# ๐Ÿ‘‰ Explained
16. Difference Between Equals and == in C# ๐Ÿ‘‰ Explained
17. What is the Null-Coalescing Operator ?? in C# ๐Ÿ‘‰ Explained
18. What is the Ternary Operator in C# ๐Ÿ‘‰ Explained
19. How Does the Switch Statement Work in C# ๐Ÿ‘‰ Explained
20. What is Object-Oriented Programming in C# ๐Ÿ‘‰ Explained
21. What are the Four Pillars of OOP in C# ๐Ÿ‘‰ Explained
22. What is Encapsulation in C# ๐Ÿ‘‰ Explained
23. What is Inheritance in C# ๐Ÿ‘‰ Explained
24. What is Polymorphism in C# ๐Ÿ‘‰ Explained
25. What is Abstraction in C# ๐Ÿ‘‰ Explained
26. What is an Abstract Class in C# ๐Ÿ‘‰ Explained
27. What is an Interface in C# ๐Ÿ‘‰ Explained
28. Can a Class Implement Multiple Interfaces in C#? ๐Ÿ‘‰ Explained
29. Difference Between Abstract Class and Interface in C# ๐Ÿ‘‰ Explained
30. How Do You Create a Class in C#? ๐Ÿ‘‰ Explained
31. What is a Constructor in C# ๐Ÿ‘‰ Explained
32. What Are the Types of Constructors in C# ๐Ÿ‘‰ Explained
33. What is a Static Constructor in C# ๐Ÿ‘‰ Explained
34. Difference Between Static and Non-Static Members in C# ๐Ÿ‘‰ Explained
35. What is the Use of 'this' Keyword in C# ๐Ÿ‘‰ Explained
36. What is a Destructor in C# ๐Ÿ‘‰ Explained
37. What is Object Initializer Syntax in C# ๐Ÿ‘‰ Explained
38. What is the Difference Between Field and Property in C# ๐Ÿ‘‰ Explained
Share:

Tags:


Feedback Modal Popup