ActiveX コントロールにユーザー定義型プロパティを追加したい。


58  2011-03-31 13:10:47  No: 102836  IP: [192.*.*.*]

現在、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

宜しく御願い致します。

編集 削除
魔界の仮面弁士  2011-03-31 14:08:33  No: 102837  IP: [192.*.*.*]

「コード記述の無い Class1」を使って、提示された ocx を
作成してみましたが、現象を再現する事はできませんでした。


> 「次のクラスは登録されていません。次のCLSIDオブジェクトを参照してください。
> :{33238196-F3BE-42F7-A8A6-FDE657646E7D}」
レジストリに、その CLSID は登録されているのでしょうか?

HKEY_CLASSES_ROOT\CLSID\{33238196-F3BE-42F7-A8A6-FDE657646E7D}

編集 削除
58  2011-03-31 14:56:41  No: 102838  IP: [192.*.*.*]

早速の御回答有難う御座います。

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」を第二引数に渡す事自体正しいですか?

編集 削除
魔界の仮面弁士  2011-03-31 19:10:54  No: 102839  IP: [192.*.*.*]

> 型が一致しません。
永続化されている PropertyBag の内容が、
現在の型定義と一致していないのでは無いでしょうか。

プロジェクトのプロパティで、[コンポーネント]タブの
「バージョン互換の互換性」を『バイナリ互換』にしてみてください。

編集 削除