'VC 头文件的声明
#define CCLIENT_API extern"C" __declspec(dllimport)
CCLIENT_API void __stdcall ClientReadMessage(char *m_sIP,char *m_sCommand,WORD *m_wLen);
CCLIENT_API BOOL __stdcall ClientStartup(UINT nMessage,HWND hWnd);函数MP4_ClientReadLastMessage是VC生成的client.dll里面的一个函数
第一个参数表示消息来自哪一个IP地址,
第二个参数表示消息的具体内容,
第三个参数表示消息的长度函数ClientStartup是VC生成的client.dll里面的一个函数
第一个参数表示对应接收程序的消息,
第二个参数表示应用程序窗口句柄'VB 声明Public Declare Function ClientReadMessage Lib "client.dll" (ByVal m_sIP As String, ByVal m_scommand As String, ByRef m_wLen As Long)
Public Declare Function ClientStartup Lib "client.dll" (ByVal nMessage As Long, ByVal hWnd As Long) As Boolean
'代码实现部分
'frmMain为主窗口Const WM_USER = &H400
Const WM_MYCOMMAND = WM_USER + 100Private Sub Form_Load()
StartGetMsg
ClientStartup(WM_MYCOMMAND, Me.hWnd) '第一个参数表示对应接收程序的消息,第二个参数表示应用程序窗口句柄End Sub
Public Sub StartGetMsg()
Load frmMain
prevWndProc = GetWindowLong(frmMain.hWnd, GWL_WNDPROC)
SetWindowLong frmMain.hWnd, GWL_WNDPROC, AddressOf WndProc
End SubPublic Sub EndGetMsg()
SetWindowLong frmMain.hWnd, GWL_WNDPROC, prevWndProc
Unload frmMain
End Sub
Public Function WndProc(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Dim sMsg As String
Dim ctemp As String
Dim Length As Long
Dim m_scommand As String
If Msg = WM_MYCOMMAND Then
If wParam = 10 Then '10对应于客户端接受到的是字符串,接下来调用函数ClientReadMessage来读取
Call ClientReadMessage(ctemp, m_scommand, Length) '程序调用了这个函数之后就崩溃了
MsgBox m_scommand
WndProc = 1
Exit Function
End If
Else
WndProc = CallWindowProc(prevWndProc, hWnd, Msg, wParam, lParam)
End If
End Function应用程序调用了函数ClientReadMessage之后,程序就崩溃了....我曾经跟踪进入client.dll的函数ClientReadMessage,发现函数里面都是正常的,应该是VB这边的问题。有谁可以帮助我一下吗,非常感谢!!
#define CCLIENT_API extern"C" __declspec(dllimport)
CCLIENT_API void __stdcall ClientReadMessage(char *m_sIP,char *m_sCommand,WORD *m_wLen);
CCLIENT_API BOOL __stdcall ClientStartup(UINT nMessage,HWND hWnd);函数MP4_ClientReadLastMessage是VC生成的client.dll里面的一个函数
第一个参数表示消息来自哪一个IP地址,
第二个参数表示消息的具体内容,
第三个参数表示消息的长度函数ClientStartup是VC生成的client.dll里面的一个函数
第一个参数表示对应接收程序的消息,
第二个参数表示应用程序窗口句柄'VB 声明Public Declare Function ClientReadMessage Lib "client.dll" (ByVal m_sIP As String, ByVal m_scommand As String, ByRef m_wLen As Long)
Public Declare Function ClientStartup Lib "client.dll" (ByVal nMessage As Long, ByVal hWnd As Long) As Boolean
'代码实现部分
'frmMain为主窗口Const WM_USER = &H400
Const WM_MYCOMMAND = WM_USER + 100Private Sub Form_Load()
StartGetMsg
ClientStartup(WM_MYCOMMAND, Me.hWnd) '第一个参数表示对应接收程序的消息,第二个参数表示应用程序窗口句柄End Sub
Public Sub StartGetMsg()
Load frmMain
prevWndProc = GetWindowLong(frmMain.hWnd, GWL_WNDPROC)
SetWindowLong frmMain.hWnd, GWL_WNDPROC, AddressOf WndProc
End SubPublic Sub EndGetMsg()
SetWindowLong frmMain.hWnd, GWL_WNDPROC, prevWndProc
Unload frmMain
End Sub
Public Function WndProc(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Dim sMsg As String
Dim ctemp As String
Dim Length As Long
Dim m_scommand As String
If Msg = WM_MYCOMMAND Then
If wParam = 10 Then '10对应于客户端接受到的是字符串,接下来调用函数ClientReadMessage来读取
Call ClientReadMessage(ctemp, m_scommand, Length) '程序调用了这个函数之后就崩溃了
MsgBox m_scommand
WndProc = 1
Exit Function
End If
Else
WndProc = CallWindowProc(prevWndProc, hWnd, Msg, wParam, lParam)
End If
End Function应用程序调用了函数ClientReadMessage之后,程序就崩溃了....我曾经跟踪进入client.dll的函数ClientReadMessage,发现函数里面都是正常的,应该是VB这边的问题。有谁可以帮助我一下吗,非常感谢!!
Dim ctemp As String * 1000
m Length As Long
Dim m_scommand As String * 1000如下方法也不行
Dim ctemp As String
Dim Length As Long
Dim m_scommand As String ctemp = String(1000, Chr(0))
m_scommand = String(1000, Chr(0))当客户端接受到消息,调用函数ClientReadMessage 读取时,VB程序都是崩溃的....有谁可以帮助一下吗,这个问题已经整整困惑我2天了....茶不思,饭不香啊....
MsgBox m_scommand
的原因阿.这种回调函数里面加msgbox很容易就崩溃阿
Public Declare Sub ClientReadMessage Lib "client.dll" (ByVal m_sIP As String, ByVal m_scommand As String, ByRef m_wLen As Integer)
Public Declare Function ClientStartup Lib "client.dll" (ByVal nMessage As Long, ByVal hWnd As Long) As Long
好建议,问题已经得到了圆满解决。看来,以后从DLL里面声明函数的时候,得千万注意函数有没有返回值啊....再次感谢楼上几位的恢复。Have a good Day !!