調(diào)用過程,調(diào)用過程有諸多技巧,它們與過程的類型、位置以及在應用程序中的使用方式有關。下面說明如何調(diào)用 Sub 過程和 Function 過程。
為東蘭等地區(qū)用戶提供了全套網(wǎng)頁設計制作服務,及東蘭網(wǎng)站建設行業(yè)解決方案。主營業(yè)務為成都網(wǎng)站制作、成都網(wǎng)站設計、外貿(mào)營銷網(wǎng)站建設、東蘭網(wǎng)站設計,以傳統(tǒng)方式定制建設網(wǎng)站,并提供域名空間備案等一條龍服務,秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!
調(diào)用 Sub 過程
與 Sub 過程不同,在表達式中,Sub 過程不能用其名字調(diào)用。調(diào)用 Sub 過程的是一個獨立的語句。Sub 過程還有一點與函數(shù)不一樣,它不會用名字返回一個值。但是,與 Function過程一樣,Sub 過程也可以修改傳遞給它們的任何變量的值。
調(diào)用 Sub 過程有兩種方法:
'以下兩個語句都調(diào)用了名為 MyProc 的 Sub 過程。
Call MyProc (FirstArgument, SecondArgument)
MyProc FirstArgument, SecondArgument
注意,當使用 Call 語法時,參數(shù)必須在括號內(nèi)。若省略 Call 關鍵字,則也必須省略參數(shù)兩邊的括號
調(diào)用函數(shù)過程
通常,調(diào)用自行編寫的函數(shù)過程的方法和調(diào)用 Visual Basic 內(nèi)部函數(shù)過程(例如 Abs)的方法一樣;即在表達式中寫上它的名字。
'下面的語句都調(diào)用函數(shù) ToDec。
Print 10 * ToDec
X = ToDec
If ToDec = 10 Then Debug.Print "Out of Range"
X = AnotherFunction ( 10 * ToDec)
就像調(diào)用 Sub 過程那樣,也能調(diào)用函數(shù)。下面的語句都調(diào)用同一個函數(shù):
Call Year (Now)
Year Now
當用這種方法調(diào)用函數(shù)時,Visual Basic 放棄返回值。
調(diào)用其它模塊中的過程
在工程中的任何地方都能調(diào)用其它模塊中的公用過程??赡苄枰付ㄟ@樣的模塊,它包含正在調(diào)用的過程。調(diào)用其它模塊中的過程的各種技巧,取決于該過程是在窗體模塊中、類模塊中還是標準模塊中。
窗體中的過程
所有窗體模塊的外部調(diào)用必須指向包含此過程的窗體模塊。如果在窗體模塊 Form1 包含 SomeSub 過程,則可使用下面的語句調(diào)用 Form1 中的過程:
Call Form1.SomeSub(arguments)
類模塊中的過程
與窗體中調(diào)用過程類似,在類模塊中調(diào)用過程要調(diào)用與過程一致并且指向類實例的變量。例如,DemoClass 是類 Class1 的實例:
Dim DemoClass as New Class1
DemoClass.SomeSub
但是不同于窗體的是,在引用一個類的實例時,不能用類名作限定符。必須首先聲明類的實例為對象變量(在這個例子中是 DemoClass )并用變量名引用它。
標準模塊中的過程
如果過程名是唯一的,則不必在調(diào)用時加模塊名。無論是在模塊內(nèi),還是在模塊外調(diào)用,結果總會引用這個唯一過程。如果過程僅出現(xiàn)在一個地方,這個過程就是唯一的。
如果兩個以上的模塊都包含同名的過程,那就有必要用模塊名來限定了。在同一模塊內(nèi)調(diào)用一個公共過程就會運行該模塊內(nèi)的過程。例如,對于 Module1 和 Module2 中名為 CommonName 的過程,從 Module2 中調(diào)用 CommonName 則運行 Module2 中的 CommonName 過程,而不是 Module1 中的 CommonName 過程。
從其它模塊調(diào)用公共過程名時必須指定那個模塊。例如,若在 Module1 中調(diào)用 Module2 中的 CommonName 過程,要用下面的語句:
Module2.CommonName (arguments)
Public ? 用于聲明對所有模塊中的所有其它過程都可以使用的過程。?
Private ?用于聲明只能在包含該聲明的模塊中使用的過程。
其實在VB中是不能直接使用匯編語言的,但是可以采用變通的方法,將匯編語言編譯成二進制代碼后,就可以在VB中使用了。
下面的代碼以二進制代碼的方式實現(xiàn)了無符號長整數(shù)的位移操作,因為VB不支持無符號長整數(shù),要實現(xiàn)相同的功能比較麻煩而且效率低,要用匯編語言就簡單多了。
Option
Explicit
Private
Declare
Function
CallWindowProc
Lib
"user32"
Alias
"CallWindowProcA"
(ByVal
lpPrevWndFunc
As
Long,
ByVal
hWnd
As
Long,
ByVal
Msg
As
Long,
ByVal
wParam
As
Long,
ByVal
lParam
As
Long)
As
Long
Private
Sub
Form_Load()
bin(0)
=
H824448B
bin(1)
=
H448B088B
bin(2)
=
H108B0424
bin(3)
=
H1089EAD3
bin(4)
=
H10C2C033
bin(5)
=
H90909000
a
=
HFFFFFFFF
b
=
8
CallWindowProc
VarPtr(bin(0)),
VarPtr(a),
VarPtr(b),
0,
Debug.Print
Hex(a)
End
Sub
這段代碼執(zhí)行了a=a8這樣一個操作
其中
bin(0)
=
H824448B
bin(1)
=
H448B088B
bin(2)
=
H108B0424
bin(3)
=
H1089EAD3
bin(4)
=
H10C2C033
bin(5)
=
H90909000
是下面的C++代碼編譯后的二進制代碼
long
CALLBACK
a_lm(HWND
a,
UINT
b,
UINT
c,
UINT
d)
{
(*(UINT*)a)=(*(UINT*)b);
return
0;
}
其對應的匯編語言如下
mov
eax,dword
ptr
[esp+8]
mov
ecx,dword
ptr
[eax]
mov
eax,dword
ptr
[esp+4]
mov
edx,dword
ptr
[eax]
shr
edx,cl
mov
dword
ptr
[eax],edx
xor
eax,eax
ret
10h
nop
nop
nop
用long
CALLBACK
a_lm(HWND
a,
UINT
b,
UINT
c,
UINT
d)這種形式,就可以直接用CallWindowProc來調(diào)用。
以上就是在VB中使用匯編(二進制代碼)的一種方法,實際上用起來還是比較麻煩的,需要編譯后在可執(zhí)行文件中將代碼接取出來
vb.net只要能調(diào)用API函數(shù)CallWindowProc就可以。
匯編碼用Byte或Long數(shù)組儲存,如果下標為0,那么你就可以:
Call CallWindowProc(數(shù)組(0),0,0,0,0)
然后把4個0 POP出去,中間是你要執(zhí)行的匯編碼,匯編碼最后是
ret等返回的。
當前題目:vb.net調(diào)用一段匯編 vb是一種匯編語言
文章路徑:http://sd-ha.com/article22/doosocc.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供、響應式網(wǎng)站、網(wǎng)站策劃、全網(wǎng)營銷推廣、域名注冊、網(wǎng)站營銷
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)