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
' 你可以自由使用本類模塊,不過請保留本聲明
'********************************************************
修改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
' 你可以自由使用本類模塊,不過請保留本聲明
'********************************************************