首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

求高人指点程序间通讯,该怎么解决

2012-01-13 
求高人指点程序间通讯有两个程序A,B,一个ActiveXDLL文件中C定义Report方法,A,B同时引用,A为主动方,B为被动

求高人指点程序间通讯
有两个程序A,B,一个ActiveX   DLL文件中C定义Report方法,A,B同时引用,A为主动方,B为被动方,现在想A通过C   Report一条消息给B,B在收到后开始处理此消息,现在问题是B无法触发C的Report方法,请高人帮忙指点一下,谢谢!
C。
Public   Function   OnReport(rptStr   As   String)   As   String
End   Function

A.
Set   sendcls   =   New   itfClass
sendcls.report   “Hello”

B.
Private     Function   itfClass_OnReport(rptStr   As   String)   As   String    
MsgBox   rptStr
End   Function

[解决办法]
帮你顶,我来学习
[解决办法]
'利用WM_COPYDATA 发消息

'程序1
Private Const WM_COPYDATA = &H4A
Private Declare Function SendMessage Lib "user32 " Alias "SendMessageA " (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function FindWindow Lib "user32 " Alias "FindWindowA " (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Private Type COPYDATASTRUCT
dwData As Long
cbData As Long
lpData As Long
End Type

Private Sub Command1_Click()
Dim cd As COPYDATASTRUCT
Dim temp As String
Dim Data() As Byte
Dim m As Long

m = FindWindow( "ThunderRT6FormDC ", "CopyData Test Form! ")

temp = "This is a Test Message! "
Data = temp
cd.cbData = UBound(Data) + 1
cd.lpData = VarPtr(Data(0))
cd.dwData = 0

SendMessage m, WM_COPYDATA, 0, cd
End Sub


'程序2
'窗体
Private Declare Function SystemParametersInfo Lib "user32 " Alias "SystemParametersInfoA " (ByVal uAction As Long, ByVal uParam As Long, ByRef lpvParam As Any, ByVal fuWinIni As Long) As Long
Private Declare Function SetWindowPos Lib "user32 " (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

Private Const SPI_GETWORKAREA As Long = 48

Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Private Sub Form_Load()
Dim ret As Long
prevWndProc = GetWindowLong(Me.hWnd, GWL_WNDPROC)
ret = SetWindowLong(Me.hWnd, GWL_WNDPROC, AddressOf Windproc)
Me.Caption = "CopyData Test Form! "
Me.AutoRedraw = True
End Sub

Private Sub Form_Unload(Cancel As Integer)
Dim ret As Long
ret = SetWindowLong(Me.hWnd, GWL_WNDPROC, prevWndProc)
End Sub


'模块
Public Declare Function GetWindowLong Lib "user32 " Alias "GetWindowLongA " (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Public Declare Function SetWindowLong Lib "user32 " Alias "SetWindowLongA " (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public 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 Declare Sub CopyMemory Lib "kernel32 " Alias "RtlMoveMemory " (Destination As Any, Source As Any, ByVal Length As Long)

Public Const WM_COPYDATA = &H4A
Public Const GWL_WNDPROC = (-4)
Public prevWndProc As Long

Private Type COPYDATASTRUCT
dwData As Long


cbData As Long
lpData As Long
End Type


Function Windproc(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Dim Cd As COPYDATASTRUCT
Dim Temp As String

Select Case Msg
Case WM_COPYDATA

CopyMemory Cd, ByVal lParam, Len(Cd)
Temp = Space(Cd.cbData)
CopyMemory ByVal Temp, ByVal Cd.lpData, Cd.cbData
Form1.Print StrConv(Temp, vbFromUnicode)

End Select

Windproc = CallWindowProc(prevWndProc, hWnd, Msg, wParam, lParam)
End Function

[解决办法]
dde 也可以实现 而且比较简单 你google 一下
不过。net开始不支持dde了

热点排行