Imports?System.Runtime.InteropServices
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名注冊(cè)、雅安服務(wù)器托管、營(yíng)銷軟件、網(wǎng)站建設(shè)、雁峰網(wǎng)站維護(hù)、網(wǎng)站推廣。
Module?APIs
StructLayout(LayoutKind.Sequential)
Public?Structure?FILETIME
Public?dwLowDateTime?As?UInteger
Public?dwHighDateTime?As?UInteger
Public?ReadOnly?Property?Value()?As?ULong
Get
Return?CType(dwHighDateTime??32,?ULong)?+?dwLowDateTime
End?Get
End?Property
End?Structure
Public?Delegate?Sub?TimerCompleteDelegate()
DllImport("kernel32.dll")
Public?Function?CreateWaitableTimer(lpTimerAttributes?As?IntPtr,?bManualReset?As?Boolean,?lpTimerName?As?String)?As?IntPtr
End?Function
DllImport("kernel32.dll")
Public?Function?SetWaitableTimer(hTimer?As?IntPtr,?ByRef?ft?As?Long,?lPeriod?As?Int32,?pfnCompletionRoutine?As?TimerCompleteDelegate,?pArgToCompletionRoutine?As?IntPtr,?fResume?As?Boolean)?As?Boolean
End?Function
Public?Function?SetWaitableTimer(hTimer?As?IntPtr,?ByRef?ft?As?Long,?lPeriod?As?Int32)?As?Boolean
Return?SetWaitableTimer(hTimer,?ft,?lPeriod,?Nothing,?IntPtr.Zero,?True)
End?Function
End?Module
SetWaitableTimer的聲明錯(cuò)了
如果DLL不是你寫的,且你要調(diào)用的函數(shù)不是__stdcall聲明,VB直接調(diào)用是會(huì)報(bào)錯(cuò)的
如果DLL是你寫的,注意調(diào)用約定問(wèn)題,并看以下代碼
***************************************************
以下是DLL代碼
.cpp里這么寫
1extern "C"__declspec(dllexport) void __stdcall HelloWorld()
2{3 MessageBox(NULL,"HelloWorld","HelloWorld",NULL);4}
.def里這么寫
LIBRARY "XXXX"
EXPORTS
; 此處以下添加
HelloWorld@1
*************************************************
vb里這么寫
1 Public Declare Sub HelloWorld Lib "XXXX.dll" ()
然后調(diào)用就可以了,上面是VB的代碼,或許VB.net的也差不多
Sub過(guò)程實(shí)現(xiàn):
Sub FactsSub(ByVal intN As Integer, ByRef result As Long)
Dim i As Integer
Dim lngResult As Long
lngResult = 1
For i = 1 To intN
lngResult *= i
Next
result = lngResult
End Sub
Private Sub btnSub_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSub.Click
Dim i As Integer
Dim sum As Long = 0
Dim result As Long
For i = 1 To 10
FactsSub(i, result)
sum += result
Next
MsgBox("過(guò)程實(shí)現(xiàn) 1! + 2! + 3! + … + 10! = " sum)
End Sub
Function函數(shù)實(shí)現(xiàn):
Function FactsFunction(ByVal intN As Integer) As Long
Dim i As Integer
Dim lngResult As Long
lngResult = 1
For i = 1 To intN
lngResult *= i
Next
Return lngResult
End Function
Private Sub btnFunction_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFunction.Click
Dim i As Integer
Dim sum As Long = 0
For i = 1 To 10
sum += FactsFunction(i)
Next
MsgBox("函數(shù)實(shí)現(xiàn) 1! + 2! + 3! + … + 10! = " sum)
End Sub
如上面所說(shuō),你可能還不太了解類、函數(shù)等的作用。
類可以用來(lái)封裝一系列操作,或者是一類對(duì)象的特性。像上面的描述,有可能是濫用類了。
建議你這樣,弄一個(gè)專門的運(yùn)算類,里面有四個(gè)運(yùn)算的函數(shù),比如:
Class 運(yùn)算
Shared Function 加(ByVal 加數(shù)1 As Decimal, ByVal 加數(shù)2 As Decimal) As Decimal
'舉個(gè)例子
Return 加數(shù)1 + 加數(shù)2 '百度打不出英文加號(hào),你自己改一下
Exit Function
End Function
Shared Function 減(ByVal 被減數(shù) As Decimal, ByVal 減數(shù) As Decimal) As Decimal
'舉個(gè)例子
Return 被減數(shù) - 減數(shù)
Exit Function
End Function
End Class
上面我寫了兩個(gè)例子,你可以照抄然后自己寫乘除的,總之不要濫用類就行。
PS:Shared函數(shù)的使用不需要類被實(shí)例化,可以直接這樣使用:
Msgbox(運(yùn)算.加(1,2).ToString)
你會(huì)發(fā)現(xiàn)“運(yùn)算”是藍(lán)色的
如果DLL不是你寫的,且你要調(diào)用的函數(shù)不是__stdcall聲明,VB直接調(diào)用是會(huì)報(bào)錯(cuò)的
如果DLL是你寫的,注意調(diào)用約定問(wèn)題,并看以下代碼
***************************************************
以下是DLL代碼
.cpp里這么寫
extern?"C"__declspec(dllexport)?void?__stdcall?HelloWorld()
{
MessageBox(NULL,"HelloWorld","HelloWorld",NULL);
}
.def里這么寫
LIBRARY????? "XXXX"
EXPORTS
;?此處以下添加
HelloWorld@1
*************************************************
vb里這么寫
Public?Declare?Sub?HelloWorld?Lib?"XXXX.dll"?()
然后調(diào)用就可以了,上面是VB的代碼,或許VB.net的也差不多
軟糖來(lái)回答羅。
“調(diào)用事件”有歧義,你的意思是不是下面兩種:
調(diào)用事件處理方法
直接調(diào)用對(duì)象名.方法名
'例如有這樣一個(gè)按鈕點(diǎn)擊事件處理程序
Private?Sub?Button1_Click(sender?As?Object,?e?As?EventArgs)?Handles?Button1.Click
秒表.Start()
End?Sub
'調(diào)用它直接用
Button1_Click(me,?new?EventArgs())
引發(fā)事件
Button1.Click.Invoke(me,?new?EventArgs())
另外?RaiseEvent 也可以引發(fā)事件,但不能使用 RaiseEvent?來(lái)引發(fā)派生窗體的控件事件,只有自己定義的類的事件才能用它引發(fā)。
如滿意,請(qǐng)采納,謝謝。