現在、VB6.0でActiveX コントロールの作成を行っております。
作成したUserControlに、同じプロジェクト内で作成したクラスClass1の型を持ったプロパティを追加し、
ReadProperties及びWritePropertiesメソッドによる値の読出し、書込みさらにはプロパティページと
の連携を実現したいのですが、ReadPropertiesメソッドで「実行時エラー '713'」が発生し、
上手く動作しません。誰かアドバイス頂けないでしょうか。
---------------- 以下、ソースコード ----------------
Option Explicit
'同プロジェクト内に Class1 が存在するとします。
Private m_P1 As Class1
Public Property Get P1 As Class1
Set P1 = m_P1
End Property
Public Property Set P1(ByVal objNewValue As Class1)
Set m_P1 = objNewValue
PropertyChanged "P1"
End Property
Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
'ここで実行時エラー '713'が発生!!
Set m_P1 = PropBag.ReadProperty("P1", New Class1)
End Sub
Private Sub UserControl_WriteProperties(PropBag As PropertyBag)
Call PropBag.WriteProperty("P1", m_P1, New Class1)
End Sub
---------------- 以上、ソースコード ----------------
エラーのメッセージは、
「次のクラスは登録されていません。次のCLSIDオブジェクトを参照してください。
:{33238196-F3BE-42F7-A8A6-FDE657646E7D}」
とダイアログが表示されます。
尚、Class1のプロパティは、下記の通りです。
DataBindingBehavior = 0 - vbNone
DataSourceBehavior = 0 - vbNone
Instancing = 5 - MultiUse
Persistable = 1 - Persistable
宜しく御願い致します。
「コード記述の無い Class1」を使って、提示された ocx を
作成してみましたが、現象を再現する事はできませんでした。
> 「次のクラスは登録されていません。次のCLSIDオブジェクトを参照してください。
> :{33238196-F3BE-42F7-A8A6-FDE657646E7D}」
レジストリに、その CLSID は登録されているのでしょうか?
HKEY_CLASSES_ROOT\CLSID\{33238196-F3BE-42F7-A8A6-FDE657646E7D}
早速の御回答有難う御座います。
Class1を別プロジェクト(ActiveX DLL)で作成し直し、
コンパイルしたDLLを、ActiveX コントロールのプロジェクト
及びそれを使用する標準EXEプロジェクトの参照に加えたら
このエラーは無くなりました。
続いてですが、
Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
'ここで実行時エラー '713'が発生!!
Set m_P1 = PropBag.ReadProperty("P1", New Class1)
End Sub
の部分でやはりエラーが発生します。
内容は、
「実行時エラー '13'
型が一致しません。」
です。トレースしてみた所、デフォルト値として渡している
第二引数の「New Class1」が、生成(Initialize)された直後に
破棄(Terminate)され、結果として「Nothing」がセットされて
いるのが原因だと思われます。
この、デフォルト値を正しくセットする方法が分かりません。(T_T)
ちなみに、この「New Class1」を第二引数に渡す事自体正しいですか?
> 型が一致しません。
永続化されている PropertyBag の内容が、
現在の型定義と一致していないのでは無いでしょうか。
プロジェクトのプロパティで、[コンポーネント]タブの
「バージョン互換の互換性」を『バイナリ互換』にしてみてください。