废话少说,直接上代码。
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