vb.net DLL调用出现问题。急。。
函数如下:
Private Function GDW_init() As Int16 '高德威车牌识别
Dim uiDataMsgNo As Long = 1025
Dim uiReConnectMsg As Long = 1026
Dim uiDisconnectMsg As Long = 1027
If GDW_Connect(Me.Handle.ToInt32, uiDataMsgNo, uiReConnectMsg, uiDisconnectMsg) = 0 Then
Return 0
Else
Return 1
End If
End Function
在模块中做如下声明:
Public Declare Function GDW_Connect Lib "GDW_VPDCommDll.dll" (ByVal nMsgHandle As Long, ByVal uiDataMsgNo As Long, ByVal uiReConnectMsg As Long, ByVal uiDisconnectMsg As Long) As Long
遇到的问题: 程序运行时,GDW_init()中参数uiDataMsgNo 为1025,但传入到"GDW_VPDCommDll.dll"中参数值变成了0. 也就是说调用DLL时参数不对。最终导致GDW_init() 返回值为错。我学习VS没有多久,猜想是DLL调用方式的问题。请各位帮忙解决。谢谢。
【附录】 以下是主界面的load过程全代码(我想会不会和Imports System.Runtime.InteropServices 有关。请各位指导)
Imports System.Data.SqlClient
Imports System.Data
Imports System.Text
Imports System.Net
Imports System.Threading
Imports System.Runtime.InteropServices
Public Class caiji
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Integer, ByVal nIndex As Integer, ByVal dwNewLong As DelegateInterceptWndProc) As Integer
Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Integer, ByVal nIndex As Integer) As Integer
Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Integer, ByVal hwnd As Integer, ByVal Msg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
Private Sub caiji_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If GDW_init() = 0 Then '车牌识别器连接成功
ToolStripStatusLabel5.Text = "车牌识别器连接: 成功"
ToolStripStatusLabel5.Image = My.Resources.green32_1
ToolStripStatusLabel5.ForeColor = Color.Green
Else
MsgBox("初始化车牌识别器失败,系统不能自动识别车牌。", MsgBoxStyle.Information, "提示")
ToolStripStatusLabel5.Text = "车牌识别器连接: 失败"
ToolStripStatusLabel5.Image = My.Resources.red16_1
ToolStripStatusLabel5.ForeColor = Color.Red
End If
'*==========================================================
g_prevWndproc = GetWindowLong(Me.Handle.ToInt32, GWL_WNDPROC) '// 获取当前消息处理句柄(Me.hwnd = Me.Handle.ToInt32)
SetWindowLong(Me.Handle.ToInt32, GWL_WNDPROC, myFunc) '// 设置当前消息处理函数.GWL_WNDPROC=-4
GCHandle.Alloc(myFunc) '//为委托建立句柄,以免它被垃圾回收,导致出错
'*==========================================================
End Sub