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

๐Ÿ’ฌ Feedback
๐Ÿš€ Start Learning
Share:

Tags: