Marshaling with C# แนะนำเรื่อง Marshaling
Marshaling คือกระบวนการในการสร้างทางเชื่อมต่อระหว่าง Manage Code และ Unmanaged code ก็คือการย้ายข้อมูลจากสภาพแวดล้อมแบบ managed ไปยัง unmanaged หรือในทางกลับกัน ซึ่งนี้ก็เป็นส่วนหนึ่งของ Core Services ของ CLR (Common Language Runtime) ด้วยเหตุที่ว่า โดยมากแล้วชนิดของข้อมูล (Types) ในสภาวะแวดล้อมแบบ Unmanaged นั้นไม่มีใน สภาวะแวดล้อมแบบManaged จึงจำเป็นจะต้องสร้าง Function ในการแปลงไปมาระหว่าง Managed Type และ Unmanaged Type ซึ่งนี่ก็คือการทำงานของกระบวนการ Marshaling.
เพื่อเป็นการ ทำความเข้าใจอีกครั้ง เราเรียก .NET Code ว่าเป็น Managed ก็เพราะว่ามันอยู่ภายใต้การควบคุมของ CLR ฉะนั้น Code อื่น ๆ นอกเหนือจากนี้เราเรียกว่า เป็น Unmanaged
Why Marshaling? ทำไมต้องมีกระบวนการนี่ด้วย
เป็นที่ทราบกันในหมู่นักพัฒนาโปรแกรมแล้วว่า ความเข้ากันได้ระหว่าง Managed และ Unmanaged นั้นไม่มี หรือจะกล่าวอีกอย่างหนึ่งได้ว่า .NET ไม่มีชนิดข้อมูลดังตัวอย่างนี้ HRESULT DWORD และ HANDLE ซึ่งมีอยู่ใน Unmanaged Code. ซึ่งก็ทำให้เราต้องหาแบบข้อมูลแทนหรือสร้างขึ้นมาเองเพื่อใช้งาน การกระทำนี้ก็คือการ Marshaling
ตัวอย่าง เช่น DWORD ของ Unmanaged code มันคือ unsigned 32-bit integer ซึ่งเราสามารถ marshal ด้วย System.UInt32 ใน .NET ดังนั้น System.UInt32 ก็เป็นแบบข้อมูลแทน DWORD ของ Unmanaged . หรือ ตัวอย่างอื่น ๆ เช่นในกรณีที่ชนิดข้อมูลเป็นแบบ Compound Types เช่น Structure , union ซึ่งไม่มีแบบข้อมูลรองรับใน สภาวะแวดล้อมของ Managed ดังนั้นจึงต้องมีการสร้างขึ้นใช้เอง(structures/classes) เพื่อใช้รองรับชนิดข้อมูล ของ Unmanaged types ที่เราต้องการใช้