程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB綜合教程 >> VB自定義數據結構的傳輸轉換

VB自定義數據結構的傳輸轉換

編輯:VB綜合教程

  用VB使用MSCOMM、WINSOCK等控件實現數據傳輸都方便,但這些控件提供的方法都只能傳輸字符串、Byte數組等,沒有提供用戶自定義數據結構直接傳輸的方法。但如果解決了用戶自定義數據結構與Byte數組的互相轉換,就自然可以實現用戶自定義數據結構的傳輸了。

  目前我們使用的轉換方法主要是以下兩種方法:

  (1) 依靠磁盤文件實現轉換:把自定義數據結構的變量(或Byte數組變量)存入一個用Binary方式打開的數據文件,然後用對應字節數的Byte數組變量(或自定義數據結構的變量)讀出,即可實現用戶自定義數據結構與Byte數組的互相轉換。

  (2) 利用內存拷貝實現轉換:用VC編寫內存拷貝函數,VB調用該函數,實現用戶自定義數據結構與Byte數組的互相轉換。

  現分別對這兩種方法的程序實現詳細進行說明。

  (一) 程序定義說明

  用戶自定義的數據結構

  Type myDATE 該自定義的數據結構可以任意復雜和嵌套

  Bchar As Byte

  fsingle As Single

  End Type

  Dim typeA As myDATE 定義自定義數據結構變量

  Dim bArray() As Byte 定義Byte數組變量

  Dim MaxLenB As Long 定義確定Byte數組長度的值

  用內存拷貝實現轉換還須如下轉換函數說明:

  實現Byte數組到用戶自定義數據結構的轉換函數Copy_BA

  Public Declare Function Copy_BA Lib "copymem.dll" (ByRef pByte As Byte, ByRef pData As myDATE, ByVal LONG cbSize)

  實現用戶自定義數據結構到Byte數組的轉換函數Copy_AB

  Public Declare Function Copy_AB Lib " copymem.dll " (ByRef pData As myDATE, ByRef pByte As Byte, ByVal LONG cbSize)

  其中copymem.dll為VC編寫的動態連接庫

  (二) 依靠磁盤文件實現轉換說明

  MaxLenB = Len(typeA)

  其中Len()為VB提供的函數,返回typeA寫至文件的大小。

  該例中 MaxLenB = 5

  ReDim bArray(MaxLenB) As Byte

  用戶自定義數據結構變量typeA存入文件C:\FNANE中

  Open "C:\\ FNANE " For Binary As #1

  Put #1, , typeA

  Close #1

  ………..

  從文件C:\FNANE中讀出字節數組bArray (MaxLenB)

  Open "C:\\ FNANE " For Binary As #1

  Get #1, , bArray

  Close #1

  以上就實現用戶自定義數據結構typeA到Byte數組bArray()的轉換過程;若想實現Byte數組bArray()? 定義數據結構typeA的轉換,只須用以上的方法存入bArray()、讀出typeA。該方法程序實現簡單,但由於要讀寫磁盤文件,所以運行速度較慢。

  (三) 利用內存拷貝實現轉換說明

  MaxLenB = LenB(typeA)

  其中LenB()為VB提供的函數,返回typeA在內存中的大小,包括元素之間的填塞。

  該例中 MaxLenB = 8

  ReDim bArray (MaxLenB) As Byte

  實現用戶自定義數據結構typeA到Byte數組bArray()的轉換

  Call Copy_BA (bArray, typeA, MaxLenB)

  實現Byte數組bArray()到用戶自定義數據結構typeA的轉換

  Call Copy_AB (typeA,bArray, MaxLenB)

  (四) 用VC編寫內存拷貝函數

  用以下兩個函數編寫成動態連接庫:copymem.dll

  

void __stdcall copy_BA(LONG pMem, LONG pSource, LONG cbSize)
{
memcpy((void*)pMem, (void*)pSource, cbSize);
}
void __stdcall copy_AB(LONG pMem, LONG pSource, LONG cbSize)
{
memcpy((void*)pMem, (void*)pSource, cbSize);
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved