顯示廣告
隱藏 ✕
看板 SmallBee
作者 SmallBee (蜜蜂貓)
標題 [絕望]Visual Basic 2010 的結構、聯合與固定長度陣列
時間 2010年09月23日 Thu. AM 03:03:28


	
C語言
	
	
VB
結構
	
struct
	
	
structure
聯合
	
union
	
	
未直接支援

1. VB 2010是可以使用union的,例如這樣的結構
   union S {
      struct {
         int32 A;
         int32 B;
      };
      struct {
         int16 AH;
         int16 AL;
         int16 BH;
         int16 BL;
      };
   };

在VB中長這樣子

    Imports System.Runtime.InteropServices

    <StructLayout(LayoutKind.Explicit)> Public Structure S
        <FieldOffset(0)> Friend A As Int32
        <FieldOffset(4)> Friend B As Int32
        <FieldOffset(0)> Friend AH As Int16
        <FieldOffset(2)> Friend AL As Int16
        <FieldOffset(4)> Friend BH As Int16
        <FieldOffset(6)> Friend BL As Int16
    End Structure

2.VB 2010只支援reference type的Array, 不支援value type的Array
簡而言之,就是VB並不存在「固定長度陣列」這種東西

所以下面這種結構在VB上是無法實現的

   union S {
      int16 AB[4];
      struct {
         int32 A;
         int32 B;
      };
   };

這是因為在VB中任何的陣列都是一個物件,需要New以及使用指標操作

3.如果想要將Byte陣列快速的寫入Structure,目前唯一的辦法就是用Marshal.Copy去搬
沒辦法像以前一樣直接利用共用空間的方法
而且因為陣列元素是透過物件方法去存取,存取效率應該也會下降

4.如果真要弄的話,就給改用其他的程式語言
或者是用底層API把內部位址指向同一個地方
(VB也不支援指標操作)

C#上實做固定大小陣列
http://msdn.microsoft.com/zh-tw/library/zycewsya(VS.80).aspx
VB上只可以在設計階段宣告為固定長度
http://msdn.microsoft.com/zh-tw/library/fe7ss728(v=VS.90).aspx

================================================================================

心得:天殺的一堆底層操作變的超級複雜
這VB對於記憶體安全性的要求已經到達一種病態的地步了

--
※ 來源: Disp BBS 看板: SmallBee 文章連結: http://disp.cc/b/106-AJt
※ 作者: SmallBee  來自: 122.116.180.163  時間: 2010-09-23 03:03:28
※ 看板: SmallBee 文章推薦值: 0 目前人氣: 0 累積人氣: 534 
guest
x)推文 r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇