看板 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
回列表(←)
分享