VB6进程间互操作

  • Post author:
  • Post category:其他


废话少说,直接上代码。

1、VB ActiveEXE 工程。

2、Form1 + Module1 + Class1

3、Form1 Code


Private




Sub


Form_Unload(Cancel


As




Integer


)



Set


oClass1


=




Nothing





End Sub



4、Module1 Code


Option




Explicit




Public


oClass1


As


Class1


Sub


Main()




Set


oClass1


=




New


Class1


Form1.Show


End Sub

5、Class1 Code


Option




Explicit




Private


mPatientID


As




String




Private


Type GUIDs


Data1


As




Long


Data2


As




Integer


Data3


As




Integer


Data4(


0




To




7


)


As




Byte




End


Type





Declares needed to register object in the ROT (Run Object Table)




Private




Const


ACTIVEOBJECT_STRONG


=




0




Private




Const


ACTIVEOBJECT_WEAK


=




1




Private


Declare


Function


CLSIDFromProgID Lib





ole32.dll





(ByVal ProgID


As




Long


, rclsid


As


GUIDs)


As




Long




Private


Declare


Function


CoDisconnectObject Lib





ole32.dll





(ByVal pUnk


As


IUnknown, pvReserved


As




Long


)


As




Long




Private


Declare


Function


RegisterActiveObject Lib





oleaut32.dll





(ByVal pUnk


As


IUnknown, rclsid


As


GUIDs, ByVal dwFlags


As




Long


, pdwRegister


As




Long


)


As




Long




Private


Declare


Function


RevokeActiveObject Lib





oleaut32.dll





(ByVal dwRegister


As




Long


, ByVal pvReserved


As




Long


)


As




Long




Private


OLEInstance


As




Long




Public




Property




Let


PatientID(ByVal Value


As




String


)


mPatientID


=


Value


End Property




Public




Property




Get


PatientID()


As




String


PatientID


=


mPatientID


End Property




Public




Sub


AddToROT()




Dim


mGuid


As


GUIDs




Dim


lp


As




Long







The magic happens here









This code is responsible for creating the entry in the ROT









Make sure to insert the correct qualified object (class) that









you want in the ROT.




OLEInstance


=




0


lp


=


CLSIDFromProgID(StrPtr(





Project1.Class1





), mGuid)




If


lp


=




0




Then


lp


=


RegisterActiveObject(Me, mGuid, ACTIVEOBJECT_WEAK, OLEInstance)




End




If




End Sub




Public




Sub


RemoveFromROT()







Once we are done with the main program, lets clean up the rot









by removing the entry for our ActiveX Server/DLL






If


OLEInstance


<>




0




Then


RevokeActiveObject OLEInstance,


0




End




If


CoDisconnectObject Me,


0




End Sub




Private




Sub


Class_Initialize()


AddToROT


mPatientID


=







123456






End Sub




Private




Sub


Class_Terminate()


RemoveFromROT


End Sub


6、编译,生成EXE,运行。

7、Test Code


Private




Sub


Command1_Click()




Dim


oTestObject


As




Object




Set


oTestObject


=




GetObject


(,





Project1.Class1





)




If


oTestObject


Is




Nothing




Then


MsgBox





Error






Else


MsgBox oTestObject.patientid




End




If




End Sub



版权声明:本文为vansoft原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。