อย่าพยายาม!!! WP7 ไม่รองรับ Reflection.Emit

Posted 15/05/2010 23:16 by nantcom

image

WP7 DOES NOT SUPPORT REFLECTION.EMIT AND MONO CECIL!

To save image in WP7, you need to use ImageTools and save to PNG file – which is compatible with WP7

ขอจั่วหัวไว้ก่อนเลยครับ เผื่อใครมาเปิดเจอเข้า

ถามว่า ทำไมถึงไม่ Support ถ้าให้ผมตอบ ก็คงเพราะว่าเขาต้องการป้องกันไม่ให้เราสามารถโหลด Assembly ที่ไม่ผ่านการตรวจสอบจาก Marketplace ได้นั่นเองครับ

เพราะว่า ระบบการ โหลด Assembly ของ .NET นั้นดีมาก (ไม่ได้เข้าข้าง) จนเราสามารถ สร้าง Assembly ของ Application แบบ Dynamic ขึ้นมาด้วยโปรแกรม C# แล้วสั่งรันได้เลย ซึ่งจะเหมาะมากสำหรับระบบที่ต้องการความปลอดภัยสูง เช่น Gen Assembly สำหรับรัน บนเครื่องที่มี CPU ID นี้ เท่านั้น หรือ ระบบ Licensing เช่น ถ้าเราซื้อ 3/5 Feature ระบบก็จะ สร้าง Assembly แบบสดๆ บนแรม ที่มีแค่ 3 Feature (ป้องกันการไปแก้ไฟล์ใน Disk) มาให้โปรแกรมรันอีกที อะไรทำนองนั้น

นอกจากนี้ การที่สามารถ Gen Assembly หรือใช้ Reflection.Emit พ่น OpCode ออกมาให้ CLR รันได้แบบ Dynamic ก็ยังมีส่วนช่วยในเรื่องประสิทธิภาพได้ด้วย เช่น กรณีของ ตัว Decode/Encode JPEG ในโปรเจค FJCore  ที่ใช้ Reflection.Emit สร้างตัว Quantizer เป็นต้น (ผมไม่รู้หรอก ว่ามันคืออะไร แต่อ่านโค๊ดแล้ว มัน Gen ตัวนี้สำหรับ Decode/Encode แต่ละภาพเลยอะ เหอๆ)

ทำไมใช้ไม่ได้?

อย่างแรกเลย คือ Reflection.Emit นั้น ต้องใช้สิทธิ์ขั้นสูงครับ ถึงจะใช้ได้ WP7 ได้ แต่นั่นก็ไม่ได้หยุดเราครับ MVP ท่านหนึ่ง ชื่อว่า Michael Sync เสียสละเวลา ทำการ Port Mono.Cecil ซึ่งเป็น Library ที่ทำงานคล้ายกับ Reflection.Emit คือ เราสามารถสร้าง Assembly แบบ Dynamic ขึ้นมา โดยการเขียนลงไปเป็นไบต์ๆ ใน Byte Array เลย แล้วใช้ AssemblyPart.Load ซึ่งรับ byte[] โหลดเอา

แต่จุดตาย ก็มาจบที่…

image

คลาส AssemblyPart ซึ่งเราจะใช้ในการ Load Assembly สำหรับกรณีของ Silverlight นั้น ดันไม่มี Function Load และ

image

System.Reflection.Assembly นั้น ก็ต้องการ Elevated Permission ซึ่งเดาว่า ต้องส่งโปรแกรมเราไป Sign ก่อน ถึงจะได้นั่นแหละ

แล้วมาเขียนบอกทำไม

เพราะว่า ถ้าคุณต้องการจะเซฟภาพ เป็น JPEG บน WP7 ด้วย Managed Code นั่นก็คือใช้ Library FJCore มันจะทำไม่ได้ครับ อย่าพยายาม Port มัน ตัวที่ใช้ได้ คือ Image Tools และต้องเซฟเป็น PNG ครับ :)

ตอนนี้ผมได้ถามคุณ Michael Sync ไปแล้ว เดี๋ยวรอเขาตอบมาทีว่า จะใช้ได้ยังไง เผื่อผมพลาดอะไรไป :)

ร่วมให้กำลังใจนักเขียน

อ่านแล้วชอบใจ อยากให้กำลังใจกับผู้แต่งบทความนี้ ขอเชิญร่วมให้กำลังใจผ่าน Paysbuy/Paypal นะครับ ปลอดภัยเพราะทำงานผ่าน SSL และไม่มีค่าใช้จ่ายเพิ่มเติมครับ เว็บเราให้นักเขียน 100% ครับ

Comment ระบบเก่า

 

Twitter Trackbacks for CoreSharp.NET - ?????????????????????????????? WP7 ??????????????????????????? Reflection.Emit - frontpage [coresharp.net] on Topsy.com said:

Pingback from  Twitter Trackbacks for                 CoreSharp.NET - ?????????????????????????????? WP7 ??????????????????????????? Reflection.Emit - frontpage         [coresharp.net]        on Topsy.com

May 16, 2010 12:12 PM
(required)  
(optional)
(required)  
Add

DisQUS Comment (ยังเอ๋อๆ อยู่)

blog comments powered by Disqus