1樓:匿名使用者
不知道相關 api 算不算?
宣告如下(在標準模組中用 public;在類模組或窗體中用 private):
public declare sub copymemory lib "kernel32" alias "rtlmovememory" (destination as any, source as any, byval length as long)
public declare sub zeromemory lib "kernel32" alias "rtlzeromemory" (destination as any, byval length as long)
public declare function isbadreadptr lib "kernel32" (lp as any, byval ucb as long) as long
public declare function isbadwriteptr lib "kernel32" (lp as any, byval ucb as long) as long
其中,宣告為 any 的引數有兩種指定方法:
1.直接指定變數(如 zeromemory myobjptr,4 或 zeromemory byref myobjptr,4)[在 32 位系統裡,所有的指標都佔 4 個位元組(4 * 8 = 32)]
2.指定變數的記憶體地址(如 zeromemory byval clng(100) 或 zeromemory byval 100&)
首先,您可以使用 copymemory 來複制陣列或變數(前提是為複製目標準備了足夠的緩衝區),例如:
dim x() as long, y() as long
redim x(10), y(10)
'在此處為 x() 賦值
copymemory y(0), x(0), (ubound(x) - lbound(x) + 1) * len(x(0))
這樣,你就可以把陣列 x 的內容複製到陣列 y 中了
zeromemory 是用來清零指定的記憶體區域的,例如,還是上面的例子:
dim x() as long
redim x(10)
'...為 x() 賦值、操作
zeromemory x(0),(ubound(x) - lbound(x) + 1) * len(x(0))
'清零(此處相當於又執行了一次 redim x(10))
而 isbadreadptr 和 isbadwriteptr 是用來判斷指定的記憶體範圍是否可以用來讀或寫(如果函式的返回值為 0 表示不適合,否則為適合)
但是像這種底層 api 是容易造成程式崩潰的,例如下面的**執行就會崩潰(100% 概率):
zeromemory byval 0&, 1
因此,強烈建議您在使用讀寫記憶體操作時,
若無法肯定某塊記憶體可用時,
先使用 isbadreadptr 和 isbadwriteptr 判斷。
2樓:匿名使用者
關注中…要有解決思路啊
計算機二級vb問題
不定義,預設是variant型別即變體型別。這要看你那些字母在下面程式 中是作什麼用途。例如a在程式 中是必須作為一個整數,例如迴圈結構中的次數變數k,它就必須為整形數1,2,3等等,這時,k就需要在開頭定義為integer,不然你不定義,它就作為一個variant型別在迴圈結構程式中執行,這樣就會...
我的電腦是華碩A550VB,記憶體條是channela dimm0,請問想加個4G的記憶體條,可以選什麼
華碩膝上型電腦a550vb,除了板載4gb記憶體,還有一個記憶體槽,可支援ddr3 1600 mhz 低電壓版記憶體,單條最大支援8gb,系統記憶體最高可擴充至12 gb 記憶體 需作業系統支援 channela dimm0表示通道a dimm0,沒有記憶體型號。不過華碩a550vb本來的記憶體條是...
計算機二級VB和二級C語言,哪個容易過點
如果只為了等級bai考試的話 du我建議你報vb。其zhi實就難度來說二級的dao每一科都並回不難。因為都只涉 答及到了簡單的演算法。c語言比較嚴謹,而且變數區分大小寫。短時間的學習很可能感覺到沒有什麼收穫。而vb語法簡單但是涉及到的知識比較多,但是在短時間內可以見到很好的效果。至於取消vb和vf本...