2011-06-16 125 views
5

我們何時應該使用此屬性,爲什麼我們需要它?例如,如果c中的本地函數將一個指向unsigned char的指針作爲參數,並且我知道需要實現無符號字符數組,爲什麼我不能使用C#中的字節數組來使用此函數?是否有必要編組?MarshalAs屬性案例研究

回答

6

在大多數情況下,運行時將能夠自動確定如何在原生代碼和託管代碼之間編組數據,因此您通常不需要指定屬性。 MarshalAs僅當定義中存在歧義(並且您想要精確地告訴運行時如何編組數據)或者您需要非默認行爲時纔是必需的。

根據我的經驗,MarshalAs只有在處理字符串時才真正需要,因爲在本機代碼中有很多不同的表示形式; unicode/ansi,c字符串與否,等等。

1

MarshalAs屬性的額外用法是使用ByValArray和SizeConst參數編組固定大小的數組(包括固定大小的字符串)。例如,Windows API中的許多結構都包含固定大小的字符串。