|
VB系列中对指针的支持很差,这也是长期以来VB用户的遗憾之一。
这是我最近的一个工具作品,用它可以创建一些常用数据类型的非托管指针,并对其进行操作
能够非常方便的使用非托管指针。并且类库完全注释过,在编程时可以看到所有参数或方法的说明。
希望这个类库能给广大喜爱指针的朋友(仅限vb.net 2005和c# 2005)带来便利
特点:
创建完全非托管的指针(在进程非托管内存块中创建),对象在销毁时自动释放在创建时申请的内存。提供了大量自定义操作符,方便操作。
为了防止内存泄漏,指针一旦创建,则无法再改变Pointer属性。
通过Value属性,简单、快捷并且安全的操作指针指向的内存。
在用指针来实例化类的时候要注意(用的new (ptr as Intptr)方法),所传递的指针必须非零,并且,最好不要指向不是用本工具所创建的指针指向内存,千万不要指向一个自己不知道干什么的内存,以免造成崩溃。特别是ByteP类型。
虽然本人并不是很清楚,非托管指针在.net中有什么作用,不过可以扩展.net功能还是不错的,释放.net的能量
正在考虑是否要加入对托管的方法创建非托管的过程/函数指针。
现在所支持的指针:
1、几乎所有整数类型(Int8,Int16,Int32,Int64)
2、8位无符号整数数组(Byte())
3、字符串
4、任意可序列化托管对象(Object)
指针类名称:
一般来说是原类型后面加个P,例如,32位整数就是Int32P或者IntegerP,字符串就是StringP
例外:Byte则为Int8P,而ByteP则是Byte的数组,ObjectP为任何可序列化对象指针
创建指针例子:
先引用附件中的类库,然后Imports Pointerdotnet
一个Integer指针:
Dim Ptr as new Int32P
或者 dim Ptr as new Int32p(intptr) 参数为一个指针
Ptr.Pointer即可得到这个整数指针类所创建的指针(Intptr类型,用其ToInt32方法可取得用Int表示的内存地址)
用Ptr.Value=123,则可对该指针指向的整数赋值
对所有整数类型指针我还加入了常用操作符的支持(+,-,*,/,\,^,mod,>=,<=,=,<>),方便大家使用,例子:
dim Ptr as new Int32P
ptr.value=3
dim ptr2 as Int32P
ptr2=ptr+5
那么Ptr2.Value就等于8
或者:
dim Ptr as new Int32P
ptr.value=3
dim ptr2 as new Int32P
ptr2.value=5
dim ptr3 as int32p
ptr3=ptr+ptr2
那么ptr3.value就等于8
对于字符串指针,我加入了一些常用操作,例如 用+,&来合并字符串,例子
dim ptr as new StringP
ptr.value="test"
ptr=ptr+" test2" (或者ptr & " test2",一样的)
那么ptr.value就是"test test2"
加号右边跟整数型一样,可以是指针
最后对ObjectP的说明:
这个类可以创建所有可序列化的对象的指针,例子
dim obj as new arraylist
dim ptr as new ObjectP(obj)
那么ptr.value就是obj这个对象,ptr.pointer就是所创建的指针(内存地址)。
希望这个指针类能给大家带来帮助
|
|