Home > C# .NET > Marshaling with C# แนะนำเรื่อง Marshaling

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 ที่เราต้องการใช้

 

Categories: C# .NET
  1. No comments yet.
  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: