网站首页 > 文章中心 > 其它

vb.net声明指针

作者:小编 更新时间:2023-09-23 09:57:40 浏览量:292人看过

vb6.0程序移植到VB.NET后提示"未声明变量"Vaptr""

讲了一堆,看的头晕,勉强看懂了,能不能好好表达自己的问题啊.废话一堆,其实有个标题就好了.vb.net不再使用VarPtr来返回变量的地址了,其实是net不提倡使用指针和地址.

net有了一个新的叫做托管的概念,建议了解一下,net里面的变量地址都是不确定的,生存周期也不确定,是由托管机制来管理内存,程序员不必再纠结于内存的管理而浪费精力.

解决方法:可以使用byref声明为整型变量直接将变量地址传过去就好,不用声明为什么指针的.

或者可以试试下面这个:

GCHandle 类的 AddressOfPinnedHandle 方法可以提供类似的功能.

用最简单的代码介绍一下指针在VB.net里面的用法?

例1:以下程序我们申请几个指向不同类型的指针:

'使用StructLayout(LayoutKind.Sequential)属性告诉net编译器:结构的元素在内存中按其出现的顺序排列

StructLayout(LayoutKind.Sequential) _

Public Structure DEFUDT_Test

Public bytb As Byte

End Structure

Public Function fnGetIntptr1() As IntPtr

'以下语句告诉net垃圾回收进程不对tabytTest进行处理,也就是说tabytTest占用的内存区域固定不变.

Dim thObject As GCHandle = GCHandle.Alloc(tabytTest, GCHandleType.Pinned)

Dim tpObject As IntPtr = thObject.AddrOfPinnedObject() '取得指向字节数组的指针

'由于使用gchandle取指针的方法只能对引用的对象有效,

Dim tudtTest1 As DEFUDT_Test

'由于结构是一种值类型变量,为保证指针申请方便,我们申请

'取得一个和结构tudtTest1大小一致的字节数组指针,只要空间占用长度和结构一样就可以了

'由于net在结构封装中会插入额外的数据位,所以一定要用sizeof方法得到结构在非托管使用时的实际大小

Dim tudtTest(Marshal.SizeOf(tudtTest1)) As Byte

'在使用完毕后一定要释放指针指向的内存块,让垃圾回收器可对这个内存块回收处理

If thObject.IsAllocated Then

thObject.Free()

End If

If thObject1.IsAllocated Then

thObject1.Free()

End Function

上例中指针流程处理可以归纳为:

①.、 定义一个具有合适内存长度的引用变量(关于引用变量和值变量的差异可以参观VB.NET的书籍)

'到的net中指针没有指向类型的说明.

'这儿可以将字节数组的内容复制到真正的结构中

vb.net用指针或变量调用函数

指针是c语言的概念,VB、VB.NET没有指针,除了指针以外也很少有人能玩到你的编程深度,关键看不懂呢.

Private Sub my_do ()

........

End Sub

相应的AddHandler c.Click, AddressOf my_do

实际上是个委托

vb.net 怎样定义指针?指针之间怎样转换?急!!!

Imports System.Runtime.InteropServices

ByVal AesKey() As Byte

Dim AesKeyObj As GCHandle = GCHandle.Alloc(AesKey, GCHandleType.Pinned)

Dim AesKeyPtr As IntPtr = AesKeyObj.AddrOfPinnedObject

'AesKeyPtr 就是AesKey的指针

If AesKeyObj.IsAllocated Then AesKeyObj.Free()

请问VB.net 里面有指针么 ? 如果有可以举例说明下么

System.Runtime.InteropServices命名空间的

Marshal函数可以使用

vb.net声明对象用new关键字与不用关键字new的区别

顾名思义,new就是给变量赋值一个新的对象

dim不加new就是说变量是XX类型的,但它不是一个真正的XX对象.如果给这个变量赋值的话,实际上就是把某一对象的指针存到变量里,它依旧不是一个对象

一个普通的类,里面有一些数据,你要弄一个对象的话,需要初始化所有类中的数据并调用构造函数.这时候我们就用new了.如果你不用new,然后直接使用的话,会引发null异常

当然上面的讨论不包括Integer、String、Long这样的数值类型,这些不能用new

以上就是土嘎嘎小编为大家整理的vb.net声明指针相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章