MarshalAs

原文鏈接:https://www.xuebuyuan.com/1033846.html

引用自:https://www.xuebuyuan.com/1033846.html

 MarshalAs是提供向非託管代碼封送數據時的規則。比如String或StringBuilder型,傳遞給非託管代碼的時候可能是LPStr LPWStr BStr等等。你通過MarshalAs特性告訴.NET應該封送成什麼類型。

Marshal就是把一個結構(類)序列化成一段內存,然後送到另一個進程(.net中Application domain)中供另一個進程中的函數使用。  
  比如你的一個結構struct{  
  Pen pen;  
  }s; s是一個指向已有的Pen對象的引用,當你把s傳給本進程中的一個函數f時,f可以很容易地找到pen的實際對象,但如果你把s傳到另外一個進程時,甚至是另外一臺機器上的進程時,這個進程就沒辦法找到pen的實際內容。Marshal技術則可以把pen對象中的所有實際內容按規則放到一個緩衝中,(所有的引用或指針都要轉換成實際對象)然後把緩衝中的內容送到另一個進程,函數調用完成再用同樣方式把結果返回來。  

 

----------------------------------------------------------------------------------

    項目需求在兩個進程中間傳遞一個結構體串,結構體成員類型不固定,長度不固定,所以就使用二進制,加上幀頭尾,相當傳遞一個一個結構體過去,另一個進程接受到數據,轉換回結構體。所以需要得到完整內容的結構體。c#的引用類型,無法傳遞其內容,所以使用marshal類,其原理見虛線上內容

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章