
vb.net DLL问题
我在程序中引用了Winio.dll在VB6.0中运行通过。可是在VB.net中却不行,调用是成功了,但没有效果。下面是部分代码,vb6.0的,如果要改成vb.net的药怎...
我在程序中引用了Winio.dll在VB6.0中运行通过。可是在VB.net中却不行,调用是成功了,但没有效果。
下面是部分代码,vb6.0的,如果要改成vb.net的药怎么改?
Option Explicit
Declare Function MapPhysToLin Lib "WinIo.dll" (ByVal PhysAddr As Long, ByVal PhysSize As Long, ByRef PhysMemHandle) As Long
Declare Function UnmapPhysicalMemory Lib "WinIo.dll" (ByVal PhysMemHandle, ByVal LinAddr) As Boolean
Declare Function GetPhysLong Lib "WinIo.dll" (ByVal PhysAddr As Long, ByRef PhysVal As Long) As Boolean
Declare Function SetPhysLong Lib "WinIo.dll" (ByVal PhysAddr As Long, ByVal PhysVal As Long) As Boolean
Declare Function GetPortVal Lib "WinIo.dll" (ByVal PortAddr As Integer, ByRef PortVal As Long, ByVal bSize As Byte) As Boolean
Declare Function SetPortVal Lib "WinIo.dll" (ByVal PortAddr As Integer, ByVal PortVal As Long, ByVal bSize As Byte) As Boolean
Declare Function InitializeWinIo Lib "WinIo.dll" () As Boolean
Declare Function ShutdownWinIo Lib "WinIo.dll" () As Boolean
Declare Function InstallWinIoDriver Lib "WinIo.dll" (ByVal DriverPath As String, ByVal Mode As Integer) As Boolean
Declare Function RemoveWinIoDriver Lib "WinIo.dll" () As Boolean
Sub CloseKeyboardINT()
'关闭键盘中断
Dim tmpX As Long
tmpX = MyINP(&H60) '清空键盘的输入缓冲区
tmpX = MyINP(&H64)
KBCWait4IOF
MyOUT &H64, &H60
KBCWait4IOF
'MyOUT &H60, KeyboardIOCommand And &HFE
MyOUT &H60, 70 '设置状态位,关闭键盘中断
End Sub
Sub KBCWait4IBF() '等待键盘输入缓冲区为空
Dim dwVal As Long
Do
GetPortVal &H64, dwVal, 1
Loop While (dwVal And &H2)
End Sub
Sub KBCWait4OBF() '等待键盘输出缓冲区为空
Dim dwVal As Long
Do
GetPortVal &H64, dwVal, 1
Loop While (dwVal And &H1)
End Sub
Sub KBCWait4IOF() '等待键盘两个缓冲区都为空
Dim dwVal As Long
Do
GetPortVal &H64, dwVal, 1
Loop While (dwVal And &H3)
End Sub
Sub KBCWait4IBFFull() '等待键盘输入缓冲区不为空
Dim dwVal As Long
Do Until (dwVal And &H2)
GetPortVal &H64, dwVal, 1
Loop
End Sub
Function MyINP(ByVal PortAddr As Integer) As Long
Dim PortVal As Long
GetPortVal PortAddr, PortVal, 1
MyINP = PortVal
End Function
Sub MyOUT(ByVal PortAddr As Integer, ByVal theData As Long)
SetPortVal PortAddr, theData, 1
End Sub 展开
下面是部分代码,vb6.0的,如果要改成vb.net的药怎么改?
Option Explicit
Declare Function MapPhysToLin Lib "WinIo.dll" (ByVal PhysAddr As Long, ByVal PhysSize As Long, ByRef PhysMemHandle) As Long
Declare Function UnmapPhysicalMemory Lib "WinIo.dll" (ByVal PhysMemHandle, ByVal LinAddr) As Boolean
Declare Function GetPhysLong Lib "WinIo.dll" (ByVal PhysAddr As Long, ByRef PhysVal As Long) As Boolean
Declare Function SetPhysLong Lib "WinIo.dll" (ByVal PhysAddr As Long, ByVal PhysVal As Long) As Boolean
Declare Function GetPortVal Lib "WinIo.dll" (ByVal PortAddr As Integer, ByRef PortVal As Long, ByVal bSize As Byte) As Boolean
Declare Function SetPortVal Lib "WinIo.dll" (ByVal PortAddr As Integer, ByVal PortVal As Long, ByVal bSize As Byte) As Boolean
Declare Function InitializeWinIo Lib "WinIo.dll" () As Boolean
Declare Function ShutdownWinIo Lib "WinIo.dll" () As Boolean
Declare Function InstallWinIoDriver Lib "WinIo.dll" (ByVal DriverPath As String, ByVal Mode As Integer) As Boolean
Declare Function RemoveWinIoDriver Lib "WinIo.dll" () As Boolean
Sub CloseKeyboardINT()
'关闭键盘中断
Dim tmpX As Long
tmpX = MyINP(&H60) '清空键盘的输入缓冲区
tmpX = MyINP(&H64)
KBCWait4IOF
MyOUT &H64, &H60
KBCWait4IOF
'MyOUT &H60, KeyboardIOCommand And &HFE
MyOUT &H60, 70 '设置状态位,关闭键盘中断
End Sub
Sub KBCWait4IBF() '等待键盘输入缓冲区为空
Dim dwVal As Long
Do
GetPortVal &H64, dwVal, 1
Loop While (dwVal And &H2)
End Sub
Sub KBCWait4OBF() '等待键盘输出缓冲区为空
Dim dwVal As Long
Do
GetPortVal &H64, dwVal, 1
Loop While (dwVal And &H1)
End Sub
Sub KBCWait4IOF() '等待键盘两个缓冲区都为空
Dim dwVal As Long
Do
GetPortVal &H64, dwVal, 1
Loop While (dwVal And &H3)
End Sub
Sub KBCWait4IBFFull() '等待键盘输入缓冲区不为空
Dim dwVal As Long
Do Until (dwVal And &H2)
GetPortVal &H64, dwVal, 1
Loop
End Sub
Function MyINP(ByVal PortAddr As Integer) As Long
Dim PortVal As Long
GetPortVal PortAddr, PortVal, 1
MyINP = PortVal
End Function
Sub MyOUT(ByVal PortAddr As Integer, ByVal theData As Long)
SetPortVal PortAddr, theData, 1
End Sub 展开
展开全部
vb6的DLL原理和VB。NET的原理是不同的。
vb6用到的DLL都是从注册表中查找注册到SYSTEM/SYSTEM32文件夹中的资料来的。
而VB。NET是优先从当前文件夹中找它们的。
我的做法是:在项目文件夹下建立一个文件夹“MyDLL”,然后,在项目名称上点右键,添加引用。从浏览中找到您复制到MYDLL文件夹中的DLL文件,以后,就可以用这个DLL了。
vb6用到的DLL都是从注册表中查找注册到SYSTEM/SYSTEM32文件夹中的资料来的。
而VB。NET是优先从当前文件夹中找它们的。
我的做法是:在项目文件夹下建立一个文件夹“MyDLL”,然后,在项目名称上点右键,添加引用。从浏览中找到您复制到MYDLL文件夹中的DLL文件,以后,就可以用这个DLL了。
展开全部
VB6的long等于vb.net中的integer
VB6的integer等于vb.net中的short
所有VB6的API原型中,没有声明byval的默认为byref,而VB.NET会默认为byval
所以,比如api原型为:
Declare Function a Lib "xxx.dll" (ByVal a As Integer, b As Long) As Long
应该换成:
Declare Function a Lib "xxx.dll" (ByVal a As Short,ByRef b As Integer) As Integer
VB6的integer等于vb.net中的short
所有VB6的API原型中,没有声明byval的默认为byref,而VB.NET会默认为byval
所以,比如api原型为:
Declare Function a Lib "xxx.dll" (ByVal a As Integer, b As Long) As Long
应该换成:
Declare Function a Lib "xxx.dll" (ByVal a As Short,ByRef b As Integer) As Integer
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询