快上网专注成都网站设计 成都网站制作 成都网站建设
成都网站建设公司服务热线:028-86922220

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

vb点虐 一些简单代码 vbnet single

请问Vb点虐 编程代码,不要C语言的,我看不懂啊?

Imports System

台江网站制作公司哪家好,找成都创新互联!从网页设计、网站建设、微信开发、APP开发、自适应网站建设等网站项目制作,到程序开发,运营维护。成都创新互联成立与2013年到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选成都创新互联

Module Program

Sub Main()

Dim n As Integer

n=6

Console.WriteLine("{0}!={1}",n,fact(n))

n=10

For i As Integer=1 To n

Console.Write("{0}{1}",fibo(i),IIF(n=i,vbCrLf,","))

Next

Console.Write("按任意键继续。。。 ")

Console.ReadKey(True)

End Sub

' 递归算阶乘

Function fact(n As Long) As Long

If 0=n OrElse 1=n Then Return 1

Return n*fact(n-1)

End Function

' 递归算斐波那契数列

Function fibo(n As Long) As Long

If 1=n OrElse 2=n Then Return 1

Return fibo(n-1)+fibo(n-2)

End Function

End Module

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

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

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

StructLayout(LayoutKind.Sequential) _

Public Structure DEFUDT_Test

Public bytb As Byte

Public i32a As Int32

End Structure

Public Function fnGetIntptr1() As IntPtr

’取得一个4字节数组指针

Dim tabytTest(3) As Byte

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

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

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

’取得一个指向32位内存数据的指针,

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

’所以对如int32等值类型必须使用将其封装成为一个对象的方法以变为引用类型

Dim ti32Test As Object = Convert.ToInt32(0)

’以下语句告诉net垃圾回收进程不对ti32test进行处理,也就是说ti32Test的内存位置固定不变。

Dim thObject1 As GCHandle = GCHandle.Alloc(ti32Test, GCHandleType.Pinned)

Dim tpObject1 As IntPtr = thObject1.AddrOfPinnedObject() ’取得ti32Test的首地址

Dim tudtTest1 As DEFUDT_Test

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

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

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

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

Dim thObject2 As GCHandle = GCHandle.Alloc(tudtTest, GCHandleType.Pinned)

Dim tpObject2 As IntPtr = thObject2.AddrOfPinnedObject() ’取得指向结构的指针

’在这儿你可以写对指针处理的任意代码(在例2中会给予补充)……

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

If thObject.IsAllocated Then

thObject.Free()

End If

If thObject1.IsAllocated Then

thObject1.Free()

End If

If thObject2.IsAllocated Then

thObject2.Free()

End If

End Function

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

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

2、使用GCHandle.Alloc方法将变量的内存区域固定下来。

3、使用GCHandle对象的AddrOfPinnedObject取得该内存区域的首地址并赋值给指针变量.

4、对指针进行操作

5、使用GCHandle对象的free方法释放指针指向的内存区域以便net垃圾回收器可以回收这个内存空间

2、指针所指向数据的存取

在点虐 中,对指针指向数据的存储函数都封装在marshal类中,主要的函数包括:Copy、PtrToStringUni 、PtrToStructure 、OffsetOf、WriteXXX,RreadXXX等,其中WriteXXX的表示向指针所表示的地址中写入XXX类型的数据,而ReadXXX中作用就是将指针所在地址的数据以XXX类型方式读出。看例程2,我们使用这些方法演示对例1那几个指向不同类型数据的指针作数据存/取操作。

例2:演示向例1申请得到的几个指针执行写入及读取数据的操作.

Marshal.WriteInt32(tpObject1, 0, Convert.ToInt32(77)) ’向ti32Test变量指向的地址写入32位整数77

MsgBox("现在ti32Test的值为:" ti32Test) ’因为变量存储地址的数据已改为77,所以显示为77

’以下这句之所以可行,因为ti32Test是32位整数,而tpObject指向的tabytTest数组刚好有4个元素

’而每一个byte元素都占用8位,合起来就是32位,和ti32Test占用的空间一样。这就印证了前面提’

’到的net中指针没有指向类型的说明。

Marshal.WriteInt32(tpObject, 0, ti32Test)

’以下代码再将tabytTest字节数组的内容理解为一个int32整数,

’并将值赋值给tudtTest结构中的int32元素

’我们使用Marshal.OffsetOf(GetType(DEFUDT_Test), "i32a").ToInt32以取得i32a元素在结构中的内存偏移位置

’所以New IntPtr(tpObject2.ToInt32 + Marshal.OffsetOf(GetType(DEFUDT_Test), "i32a").ToInt32)就临时产生了

’一个指针并指向i32a所在的内存地址(, 这个方法也说明了指针可以以字节为单位进行加减计算以指向合适的变量。

’Marshal.ReadInt32的作用是从指针中读取一个32整数。

Marshal.WriteInt32(New IntPtr(tpObject2.ToInt32 + Marshal.OffsetOf(GetType(DEFUDT_Test), "i32a").ToInt32), _

0, Marshal.ReadInt32(tpObject))

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

MsgBox(Marshal.OffsetOf(tudtTest1.GetType, "i32a").ToInt32)

tudtTest1 = CType(Marshal.PtrToStructure(tpObject2, GetType(DEFUDT_Test)), DEFUDT_Test)

MsgBox("结构tidtTest1中i32a元素的值为:" tudtTest1.i32a) ’此处将显示刚赋的值77

问几段简单的vb点虐 代码

啊 对 我忘了 打开文件的时候把得到的文件名放到这个变量里strFilename

是报错还是出现什么问题 我测试过可以啊 因为图片打开之后源文件是被使用的 所以我先拷贝了一个副本 再把原来的释放掉 这样才能删除

要删除到回收站好像没有什么现成的方法,我用了API

Imports System.IO

Imports System.Drawing.Imaging

Imports System.Runtime.InteropServices

Public Class Viewer

Dim strFilename As String = String.Empty '存储文件名

'定义一些API及所需常量、结构,删除到回收站所需的,如需永久删除文件则可以不定义

Public Const FO_DELETE As Integer = H3

Public Const FOF_NOCONFIRMATION As Short = H10

Public Const FOF_ALLOWUNDO As Short = H40

Declare Unicode Function SHFileOperation Lib "shell32.dll" ([In](), Out() ByVal sfo As SHFILEOPSTRUCT) As Int32

StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Ansi) _

Public Class SHFILEOPSTRUCT

Public hwnd As IntPtr

Public wFunc As UInt32

Public pFrom As String

Public pTo As String

Public fFlags As UInt16

Public fAnyOperationsAborted As Int32

Public hNameMappings As IntPtr

Public lpszProgressTitle As String

End Class

'''''''''''''其他代码''''''''''''''''''''

'删除文件

Private Sub btnDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDelete.Click

If String.Empty = strFilename Then

Return

End If

If DialogResult.Yes = MessageBox.Show("是要删除这个文件吗?", "消息", MessageBoxButtons.YesNo, MessageBoxIcon.Information) Then

Dim bmp As Bitmap = New Bitmap(picView.Width, picView.Height)

Dim gra As Graphics = Graphics.FromImage(bmp)

gra.DrawImage(picView.Image, Point.Empty)

gra.Dispose()

picView.Image.Dispose()

picView.Image = bmp

Dim shfp As New SHFILEOPSTRUCT

With shfp

.wFunc = Convert.ToUInt32(FO_DELETE)

.pFrom = strFilename Chr(0)

.pTo = Nothing

.fFlags = Convert.ToUInt16(FOF_ALLOWUNDO Or FOF_NOCONFIRMATION)

End With

SHFileOperation(shfp)

btnDelete.Enabled = False

'以下一行永久删除文件

'File.Delete(strFilename)

End If

End Sub

End Class


分享题目:vb点虐 一些简单代码 vbnet single
文章路径:http://6mz.cn/article/ddgegoo.html

其他资讯