首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

CreateStreamOnHGlobal函数或数组的一个有关问题

2012-01-19 
CreateStreamOnHGlobal函数或数组的一个问题Private Sub Form_Load()Dim GpInput As GdiplusStartupInputD

CreateStreamOnHGlobal函数或数组的一个问题
Private Sub Form_Load()
Dim GpInput As GdiplusStartupInput
Dim ResData() As Byte, Stream As Object
Dim CurWinLong As Long
Dim TempBI As BITMAPINFO

GpInput.GdiplusVersion = 1
If GdiplusStartup(token, GpInput) <> 0 Then Unload Me

ResData = LoadResData(106, "CUSTOM")
CreateStreamOnHGlobal ResData(0), False, Stream
GdipLoadImageFromStream Stream, Img
Set Stream = Nothing

GdipGetImageHeight Img, PngHeight
GdipGetImageWidth Img, PngWidth


以上代码中的蓝色部分中,“resdata(0)”位置应该是一个内存句柄,可是为什么这儿使用了这个数组中的第一个元素?
难道resdata(0)就是表示内存句柄?这个有规定吗?如果不复杂请解释一下,如果复杂,还望提供参考资料我自己去看!

loadresdata()加载的是一个png图片!



[解决办法]
resdata是数组,resdata(0)代表数组第一个元素,如果函数参数定义为传址也就等于传数组的起始地址。
[解决办法]
这涉及到VB的两种参数传递方式,byref和byval,byref表示传递地址(也就是所谓的内存句柄),byval表示传值,默认是byref。
CreateStreamOnHGlobal ResData(0), False, Stream一句中ResData(0)表示把数组的第一个成员以byef方式传入到CreateStreamOnHGlobal中,即把ResData(0)的地址传参函数,当然,还可以使用byval varptr(ResData(0))把地址传给函数。
所谓的内存句柄,就是一块连续内存的首地址,VB数组变量是一个指针,但它不是直接指针表示数组成员(即连续内存)的首地址,而是指针一个结构体,结构体包含数组的长度等说明,因此叫安全数组,在结构体内有指向表示实际数组成员的指针,指向数组首个成员的地址。

热点排行