我可以根据其类型创建新对象吗?

时间:2012-06-20 17:38:22

标签: vb6

给出clsPerson类型的对象:

dim oP as New clsPerson
oP.FirstName = "Sam"

是否有办法询问变量oP并创建该类型的新对象?

1 个答案:

答案 0 :(得分:1)

如果该类已正确注册到COM(即来自ActiveX dll项目),那么是:

Option Explicit

Private Type Guid
  Data1 As Long
  Data2 As Integer
  Data3 As Integer
  Data4(0 To 7) As Byte
End Type

Private Const CLSCTX_INPROC_SERVER As Long = 1
Private Const IID_IUnknown As String = "{00000000-0000-0000-C000-000000000046}"

Private Declare Function CLSIDFromString Lib "ole32.dll" (ByVal lpsz As Long, ByRef pclsid As Guid) As Long
Private Declare Function IIDFromString Lib "ole32.dll" (ByVal lpsz As Long, ByRef lpiid As Guid) As Long
Private Declare Function CoCreateInstance Lib "ole32.dll" (ByRef rclsid As Guid, ByVal pUnkOuter As Long, ByVal dwClsContext As Long, ByRef riid As Guid, ByRef ppv As Object) As Long



Public Function GetAnotherInstanceOf(ByVal this As Object) As Object
  Static iunk As Guid
  If iunk.Data4(7) = 0 Then
    IIDFromString StrPtr(IID_IUnknown), iunk
  End If

  Dim ti As TLI.TypeInfo

  With New TLI.TLIApplication
    Set ti = .ClassInfoFromObject(this)
  End With

  Dim clsid As Guid
  CLSIDFromString StrPtr(ti.Guid), clsid

  CoCreateInstance clsid, 0, CLSCTX_INPROC_SERVER, iunk, GetAnotherInstanceOf
End Function

用法:

Dim s As New MSXML2.DOMDocument60

Dim clone As Object

MsgBox TypeName(clone)
Set clone = GetAnotherInstanceOf(s)
MsgBox TypeName(clone)

在项目中找到TLI TypeLib Information - >引用。

相关问题