国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

vb.Net編程簡介之四

2024-07-10 13:02:31
字體:
供稿:網(wǎng)友

商業(yè)源碼熱門下載www.html.org.cn

windows apis
    大多數(shù)的api調(diào)用可以象在visual basic 6.0中一樣使用,因為
數(shù)據(jù)類型發(fā)生了改變。在visual basic 6.0中的long類型在visual basic.net中定義為integer類型。在升級過程中這些定義會自動改變,例如:

private declare function getversion lib "kernel32" () as
long
function getver()
    dim ver as long
    ver = getversion()
    msgbox ("system version is " & ver)
end function

改變?yōu)椋?br>
private declare function getversion lib "kernel32" () as
integer        
function getver()
    dim ver as integer
    ver = getversion()
    msgbox("system version is " & ver)
end function

    除了數(shù)字類型的升級外,visual basic 6.0還支持固定長度字符
串類型,該類型升級到visual basic.net后會定義為固定長度字符串兼容類。

所以在visual basic 6.0代碼中最好使用通用字符串定義,例如:

private declare function getusername lib "advapi32.dll"
alias _
"getusernamea" (byval lpbuffer as string, byref nsize as
long) as long
function getuser()
    dim ret as long
    dim username as string
    dim buffer as string * 25
    ret = getusername(buffer, 25)
    username = left$(buffer, instr(buffer, chr(0)) - 1)
    msgbox (username)
end function

上面的代碼出現(xiàn)了固定長度字符串,最好更改為:

    dim buffer as string
    buffer = string$(25, " ")

升級到visual basic.net后會稱為下面的樣子:

declare function getusername lib "advapi32.dll" alias _
"getusernamea" (byval lpbuffer as string, byref nsize as
integer) as integer
function getuser()
    dim ret as integer
    dim username as string
    dim buffer as string
    buffer = new string(cchar(" "), 25)
    ret = getusername(buffer, 25)
    username = left(buffer, instr(buffer, chr(0)) - 1)
    msgbox(username)
end function

    在有些情況下,visual basic.net能夠更好的控制傳遞字符串到
api調(diào)用,因為你可以通過ansi 和unicode關(guān)鍵字定義字符串傳遞的方式。

有三種情況需要對代碼最手工改進。
1、在傳遞給api函數(shù)的自定義數(shù)據(jù)類型定義中包含固定長度字符串和
數(shù)組。在visual basic.net中你需要對自定義數(shù)據(jù)類型定義中的每一個固定長度字符串和數(shù)組添加marshallas 屬性。
2、在定義中使用as any聲明。該種聲明不再被visual basic.net支
持,變量定義為as any通常是為了傳遞一個既可能是字符串也可能是null的變量,在visual basic.net中,你可以定義兩個不同類型的api,一個為long類型,一個為string類型,以api函數(shù)getprivateprofilestring 為例:

private declare function getprivateprofilestring
lib "kernel32" alias
   "getprivateprofilestringa" (byval lpapplicationname as
string, byval
      lpkeyname as any, byval lpdefault as string, byval
         lpreturnedstring as string, byval nsize as long,
byval
            lpfilename as string) as long

你可以刪除as any而代之以定義兩個不同的函數(shù);一個接受long數(shù)
值,一個接收string樹脂:

private declare function getprivateprofilestringkey
lib "kernel32" alias
   "getprivateprofilestringa" (byval lpapplicationname as
string, byval
      lpkeyname as string, byval lpdefault as string, byval
         lpreturnedstring as string, byval nsize as long,
byval
            lpfilename as string) as long
private declare function getprivateprofilestringnullkey
lib "kernel32"
   alias "getprivateprofilestringa" (byval
lpapplicationname as string,
      byval lpkeyname as long, byval lpdefault as string,
byval
         lpreturnedstring as string, byval nsize as long,
byval
            lpfilename as string) as long

當你希望傳遞null數(shù)值時,使用getprivateprofilestringnullkey。

3、如果你的程序中有諸如建立線程、windows子類(subclassing),
消息鉤子等api調(diào)用時,這些函數(shù)在visual basic.net下可能會產(chǎn)生運行時錯誤。很多這些api在visual basic.net或者.net架構(gòu)中有等價的函數(shù)。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 昌黎县| 凤凰县| 邵东县| 巩义市| 平湖市| 安西县| 阳东县| 平乐县| 柳州市| 普陀区| 沙坪坝区| 深圳市| 南陵县| 河南省| 咸阳市| 大渡口区| 莒南县| 沙河市| 哈巴河县| 临安市| 东源县| 额敏县| 兴宁市| 望奎县| 弥渡县| 包头市| 吐鲁番市| 邵东县| 武宁县| 大足县| 高州市| 湘潭市| 钦州市| 安塞县| 漳州市| 焉耆| 北海市| 东港市| 巩留县| 丽江市| 普兰店市|