|
▼ichinose さん:
ありがとうございます。
この方法は、目からうろこ状態でした、レイトバインディング
による手法で、clsにタイプライブラリ情報を持たせない手法なんですね。
贅沢な希望なのですが、わたしの方の希望としましては、
2つ有ります。
1.Fucn2からClass1のPrivate関数をCallしたい
2.できれば1つのClassで実現したい
1に関してはichinoseさんの方法を使用させていただきまして
イベント追加し実現できました
そのコードが以下になります。
2ですが、私の方で、attribute を使用して一つのClassで
隠蔽する方法がないか調べてました。
海外のHPに”Hidden Property”というのが有りまして
クラスモジュールをエクスポートした後に隠蔽したいコレクション
アイテムプロパティを以下のように書き換え、再度インポートすれば
よいような事が書いてあり私もこれをヒントに、コレクションでなく任意の
Publicメンバ関数やプロパティに利用できるか試してみましたがだめでした。
以下が、そのコレクションの隠蔽?になります。
(済みません私もよく判らないので日本語がおかしいです。
申し訳ないです)
この側面から隠しメソッドができないかなと考えて、いろいろ数値
を変えたり、違うAttributeを探して試したましがギブアップしてしまいました。
Public Property Get Items( _
) As IUnknown
'Attribute Items.VB_UserMemId = -4
'Attribute Items.VB_MemberFlags = "40"
' this property allows you to enumerate
' this collection with the For...Each syntax
Set Items= m_colItems.[_NewEnum]
End Property
以下が、1を実現したコードです。
'----------------Class1--------------------------------
Option Explicit
Private WithEvents cls As Class2
'==================================================
Public Sub Func1()
MsgBox "Func1!"
End Sub
'==================================================
Property Get Raw() As Object
Set Raw = cls
End Property
'==================================================
Private Sub Class_Initialize()
Set cls = New Class2
End Sub
'==================================================
Private Sub Class_Terminate()
Set cls = Nothing
End Sub
Private Sub Func2Private()
MsgBox "Func2Private!"
End Sub
Private Sub cls_Func2()
Call Func2Private
End Sub
-------------------------------------------------
'----------------Class2--------------------------------
Option Explicit
Public Event Func2()
Public Sub Func2()
RaiseEvent Func2
MsgBox "Func2!"
End Sub
'------------------------------------------------------
'----------標準モジュール-------------------------------
Dim クラスAs New Class1
Sub test()
クラス.Func1 'ここでは、Func1はメンバーリストに入っている
HDW.Raw.Func2 'イベント経由でClass2からClass1のプライベイト
'関数をCall
End Sub
'------------------------------------------------------------
|
|