VB“變態(tài)”用法之有用技術和沒用指針

字號:

Bill McCarthy在那篇《Modify a Varialbe's Pointer》里用SafeArray實現(xiàn)多進程的數(shù)組共享內(nèi)存,他考慮了數(shù)組變量的類型,因此可以兼容大部分數(shù)值類型的數(shù)組,是一個非常不錯的東西。我這里不講它實現(xiàn)的具體方法,只是想和大家一起看看SafeArray還能做什么。
    修改SafeArray結構的pvData指針卻是一個非常有用的技術,通過修改pvData,就能夠通過數(shù)組直接訪問指定的內(nèi)存。
    和上一篇文章包裝字串指針類一樣,通過修改pvData,我們也可以包裝一些普通數(shù)值類型變量的指針類。
    我在指針的第一篇文章里說過,要想實現(xiàn)C語言里'*'這個取指針所指變量值功能,必須要用CopyMemory。實際上,我說錯了,我們完全可以實現(xiàn)和C里一樣的指針,如下:
    //C語言
    Long L;
    Long* pL = &L;
    *pL = 12;
    printf("L = %d *pL = %d", l, *pl);
    'VB里
    Dim pL As New pLong, L As Long
    pL.Attach L
    '也可以 pL.Ptr = VarPtr(L)
    pL = 12
    Debug.Print "L ="; L; " *pL ="; pL
    結果都能夠通過修改pL指針,達到修改變量L的目的。
    上面VB代碼里的pLong就是一個包裝好的Long型變量的指針類,下面看看如何來實現(xiàn)它:
    Option Explicit
    '********************************************************
    'pLong.cls
    '包裝一個Long型指針的類
    '作者: 熊超 ID: AdamBear 2002年3月18日
    'http://www.csdn.net/Author/AdamBear
    ' 你可以自由使用本類模塊,不過請保留本聲明
    '********************************************************