Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As LongPrivate Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As LongPrivate Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As LongPrivate 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 Command1_Click()
'Dim l As String
'Dim light As Integer, dark As Integer
'Call USB_READ
''l = USB_READ(light, dark)
'Print light, dark
Dim DllHand As Long
Dim a As Long, b As Long
Dim DllProc As Long'ChDrive App.Path '用来改变驱动器到指定的有说要dll的驱动器
ChDir App.Path '这一句是将路径指向dll所在的目录
DllHand = LoadLibrary("USB.dll")
If DllHand = 0 Then MsgBox "没法加载DLL,请先将该工程保存重新启动程序!": Exit Sub
DllProc = GetProcAddress(DllHand, "USB_READ")
If DllProc = 0 Then MsgBox "没找到此函数,请先将该工程保存重新启动程序!": Exit Sub
CallWindowProc DllProc, DllHand, a, b, 0
' 执行你的DLL的函数
'Call USB_READ
FreeLibrary DllHand '释放DLL
End Sub
Private Sub Command1_Click()
'Dim l As String
'Dim light As Integer, dark As Integer
'Call USB_READ
''l = USB_READ(light, dark)
'Print light, dark
Dim DllHand As Long
Dim a As Long, b As Long
Dim DllProc As Long'ChDrive App.Path '用来改变驱动器到指定的有说要dll的驱动器
ChDir App.Path '这一句是将路径指向dll所在的目录
DllHand = LoadLibrary("USB.dll")
If DllHand = 0 Then MsgBox "没法加载DLL,请先将该工程保存重新启动程序!": Exit Sub
DllProc = GetProcAddress(DllHand, "USB_READ")
If DllProc = 0 Then MsgBox "没找到此函数,请先将该工程保存重新启动程序!": Exit Sub
CallWindowProc DllProc, DllHand, a, b, 0
' 执行你的DLL的函数
'Call USB_READ
FreeLibrary DllHand '释放DLL
End Sub
解决方案 »
- VB中,怎么表示16进制数组???急求!
- 无效过程或参数
- 求助:用sql语句导入文本文件!在线急等!
- 如何屏蔽windows2000或者xp的“win” 键 和 “ctrl+alt+del”键
- 关于报表不能时时更新的问题
- 请问这句话是什么意思 “如何在VB程序运行时添加和删除控件”
- ######## 根据日期筛选的select语句###############
- 谁能帮帮我啊!在线等答案! 100分送出有答案马上结帖
- 如何强制使文本框不能插入光标(但能显示文本)
- 怎样处理sqlser中sql语句中除零的问题比如sql="select 名称,sum(金额/数量) as 单价"
- kmlxk(xiaoKKKK) 进来送分了!
- 关机程序
你是要把窗体子类化么?要先SetWindowLong“导出”WindowProc啊
在调用后会用当前栈跟&HDCBAABCD比较, 如果相同则直接返回, 否则自己ret10h.而且你的函数是2个DWORD, 那么callwindowsproc最后还是ret10h, 一共是ret18h了.
栈平不了.当然调用失败.PUSH DCBAABCD
PUSH ESI
PUSH DWORD PTR SS:[EBP+18]
PUSH DWORD PTR SS:[EBP+14]
PUSH DWORD PTR SS:[EBP+10]
PUSH DWORD PTR SS:[EBP+C]
MOV EAX,DWORD PTR FS:[18]
OR BYTE PTR DS:[EAX+FB8],1
CALL DWORD PTR SS:[EBP+8]
MOV ECX,DWORD PTR FS:[18]
AND BYTE PTR DS:[ECX+FB8],0
CMP DWORD PTR SS:[ESP+4],DCBAABCD
JNZ USER32.77E43844 ...(1)
(2).....
(1)
CMP DWORD PTR SS:[ESP],DCBAABCD
JNZ SHORT USER32.77E43855
SUB ESP,4
JMP USER32.77E2C3D3 ...(2)
ADD ESP,10
JMP USER32.77E2C3D3 ...(2)
具体如下:
Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
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 Command1_Click()
Dim DllHand As Long
Dim a As Long, b As Long
Dim DllProc As LongDllHand = LoadLibrary("USB.dll")
If DllHand = 0 Then MsgBox "没法加载DLL,请先将该工程保存重新启动程序!": Exit Sub
DllProc = GetProcAddress(DllHand, "USB_READ")
If DllProc = 0 Then MsgBox "没找到此函数,请先将该工程保存重新启动程序!": Exit Sub
CallWindowProc DllProc, DllHand, a, b,0 '(a,b是我自己定义的)
FreeLibrary DllHand '释放DLL
End Sub注:在USB.dll中有一个函数 USB_READ(double *data,double*dark),我是想通过调用该函数获得data 和dark的数据,这些数据是通过USB连接的探头传上来的,但还不知道怎么把这些数据导出来,本以为定义a ,b 就能将数据导到a ,b 中的,可事实告诉我错了,呵呵。本人是想要对这些数据进行处理的,但不知道哪里出错了,还请指点下,如有需要什么资料可留下邮箱地址。谢谢