vb.net變量指針,vb 函數指針

vb.net用指針或變量調用函數

指針是c語言的概念,VB、VB.NET沒有指針,除了指針以外也很少有人能玩到你的編程深度,關鍵看不懂呢。

創新互聯公司2013年至今,是專業互聯網技術服務公司,擁有項目成都網站設計、做網站網站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元宿遷做網站,已為上家服務,為宿遷各地企業和個人服務,聯系電話:18982081108

???就是子程序的名稱,比如每次點擊c后就自動調動相對應的子程序,如子程序是

Private Sub my_do ()

........

End Sub

相應的AddHandler c.Click, AddressOf my_do

實際上是個委托

vb.net 怎么使用指針對數組快速賦值賦值

數組好像沒有快速賦值吧,或者你再把問題再清楚一點。

語句執行時間倒是可以做到。在語句前

Dim oldTime As Date = Now

在過程語句后加

Dim newTime As Date = Now

Dim differenceInSeconds As Long = DateDiff(DateInterval.Second, oldTime, newTime)

textbox1.text= "共用了:" differenceInSeconds "秒!"

在VB.net中如何取變量、結構、數組、函數的地址?

當然可以的,需要System.Runtime.InteropServices?命名空間中的?Marshal?類

Imports?System.Runtime.InteropServices?'這里一定要有?

Public?Class?Form1

Public?Structure?m_Point

Dim?x?As?Integer

Dim?y?As?Integer

End?Structure

Private?Sub?Button1_Click(ByVal?sender?As?System.Object,?ByVal?e?As?System.EventArgs)?Handles?Button1.Click

Dim?i?As?Integer?=?50

Dim?ai()?As?Integer?=?{1,?2,?3,?4,?5}

Dim?pi?As?IntPtr?=?GCHandle.Alloc(i,?GCHandleType.Pinned).AddrOfPinnedObject()?'取得整形變量的指針?

Dim?pai?As?IntPtr?=?GCHandle.Alloc(ai,?GCHandleType.Pinned).AddrOfPinnedObject()?'取得整形數組首地址指針

MsgBox(Marshal.ReadInt32(pi,?0))?'讀回整形變量指針指向的值

MsgBox(Marshal.ReadInt32(pai,?0?*?4))?'讀回數組的第一個元素

MsgBox(Marshal.ReadInt32(pai,?1?*?4))?'讀回數組的第二個元素

MsgBox(Marshal.ReadInt32(pai,?2?*?4))?'讀回數組的第三個元素

'-----下面是結構--------------------------

Dim?m_p?As?New?m_Point

m_p.x?=?100

m_p.y?=?50

Dim?pm_p?As?IntPtr?=?GCHandle.Alloc(m_p,?GCHandleType.Pinned).AddrOfPinnedObject()?'取得結構首地址指針?

MsgBox(Marshal.ReadInt32(pm_p,?0?*?4))?'讀回結構的第一個值

MsgBox(Marshal.ReadInt32(pm_p,?1?*?4))?'讀回結構的第二個值

End?Sub

End?Class

VBNET如何移動記錄集的記錄指針?

可以先對數據庫中的表數據進行正序排列,然后打印結果的時候將print放在循環外。

如:test表中有如下數據

現在要用游標取出最后一條,也就是“5,孫七”這條。

代碼如下:

declare?@id?int?--定義變量

declare?@name?varchar(10)?--定義變量

declare?cur_c?cursor?for?select?*?from?test?order?by?id?--定義游標

open?cur_c?--打開游標

fetch?next?from?cur_c?into?@id,@name?--取游標值到變量

while?@@fetch_status?=?0?--循環退出條件

begin?--循環開始

fetch?next?from?cur_c?into?@id,@name??--繼續取游標值到變量

end?--循環結束

print?cast(@id?as?varchar)+','+@name?--打印最后一條結果

close?cur_c?--關閉游標

deallocate?cur_c?--釋放游標

結果如圖:

用最簡單的代碼介紹一下指針在VB.net里面的用法?

例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、指針所指向數據的存取

在.net中,對指針指向數據的存儲函數都封裝在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.net如何讀寫二進制文件? 有各種類型的變量

open函數用來打開一個文件,其調用的一般形式為:

文件指針名=fopen(文件名,使用文件方式);

其中,

“文件指針名”必須是被說明為FILE

類型的指針變量;

“文件名”是被打開文件的文件名;

“使用文件方式”是指文件的類型和操作要求。

“文件名”是字符串常量或字符串數組。

例如:

FILE

*fp;

fp=("file

a","r");

其意義是在當前目錄下打開文件file

a,只允許進行“讀”操作,并使fp指向該文件。

又如:

FILE

*fphzk

fphzk=("c:\\hzk16","rb")

其意義是打開C驅動器磁盤的根目錄下的文件hzk16,這是一個二進制文件,只允許按二進制方式進行讀操作。兩個反斜線“\\

”中的第一個表示轉義字符,第二個表示根目錄。

使用文件的方式共有12種,下面給出了它們的符號和意義。

文件使用方式

意義

“rt”

只讀打開一個文本文件,只允許讀數據

“wt”

只寫打開或建立一個文本文件,只允許寫數據

“at”

追加打開一個文本文件,并在文件末尾寫數據

“rb”

只讀打開一個二進制文件,只允許讀數據

“wb”

只寫打開或建立一個二進制文件,只允許寫數據

“ab”

追加打開一個二進制文件,并在文件末尾寫數據

“rt+”

讀寫打開一個文本文件,允許讀和寫

“wt+”

讀寫打開或建立一個文本文件,允許讀寫

“at+”

讀寫打開一個文本文件,允許讀,或在文件末追加數據

“rb+”

讀寫打開一個二進制文件,允許讀和寫

“wb+”

讀寫打開或建立一個二進制文件,允許讀和寫

“ab+”

讀寫打開一個二進制文件,允許讀,或在文件末追加數據

對于文件使用方式有以下幾點說明:

1)

文件使用方式由r,w,a,t,b,+六個字符拼成,各字符的含義是:

r(read):

w(write):

a(append):

追加

t(text):

文本文件,可省略不寫

b(banary):

二進制文件

+:

讀和寫

2)

凡用“r”打開一個文件時,該文件必須已經存在,且只能從該文件讀出。

3)

用“w”打開的文件只能向該文件寫入。若打開的文件不存在,則以指定的文件名建立該文件,若打開的文件已經存在,則將該文件刪去,重建一個新文件。

4)

若要向一個已存在的文件追加新的信息,只能用“a”方式打開文件。但此時該文件必須是存在的,否則將會出錯。

5)

在打開一個文件時,如果出錯,fopen將返回一個空指針值NULL。在程序中可以用這一信息來判別是否完成打開文件的工作,并作相應的處理。因此常用以下程序段打開文件:

6)

if((fp=fopen("c:\\hzk16","rb")==NULL)

{

printf("\nerror

on

open

c:\\hzk16

file

當前名稱:vb.net變量指針,vb 函數指針
文章分享:http://m.kartarina.com/article0/hegeoo.html

成都網站建設公司_創新互聯,為您提供網站內鏈虛擬主機網站策劃定制開發商城網站自適應網站

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

網站優化排名
主站蜘蛛池模板: 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 亚洲国产精品成人AV无码久久综合影院| 无码人妻精品一区二区三区东京热| 精品无码久久久久国产| 无码无需播放器在线观看| 国产AV巨作情欲放纵无码| 日韩免费无码一区二区视频| 人妻少妇乱子伦无码视频专区 | 中文字幕人妻三级中文无码视频| 无码孕妇孕交在线观看| av无码东京热亚洲男人的天堂 | 影音先锋无码a∨男人资源站| 最新中文字幕AV无码不卡| 免费a级毛片无码a∨蜜芽试看| 无码国产福利av私拍 | 亚洲国产精品无码久久SM| 国产免费av片在线无码免费看| 性无码免费一区二区三区在线| 国产精品无码素人福利| 好了av第四综合无码久久 | 亚洲一区二区三区国产精品无码| 国产色爽免费无码视频| 午夜无码人妻av大片色欲| 亚洲AV综合色区无码一二三区| 日韩亚洲AV无码一区二区不卡 | 亚洲AV色吊丝无码| 性无码免费一区二区三区在线 | 麻豆AV无码精品一区二区| 亚洲国产精品无码专区在线观看| 亚洲午夜无码片在线观看影院猛 | 人妻少妇精品无码专区动漫| 日韩AV无码久久一区二区| 亚洲Aⅴ无码专区在线观看q| 无码视频一区二区三区在线观看| 伊人久久精品无码av一区| 亚洲国产精品无码专区在线观看 | 久久久久av无码免费网| 久久久久亚洲AV无码专区首JN| 无码人妻AV一二区二区三区| 日韩人妻无码一区二区三区久久 | 自慰无码一区二区三区|