任意のフォームのキーエベントをフックしてコントロールを制御するプログラムを作成しDLL化しようとしているのですが該当のソースをコンパイルすると以下のエラーがでます。
「プライベートオブジェクトモジュールを、
パブリックオブジェクトモジュール内でパブリックプローシジャの
引数または戻り値、パブリックデータメンバ、またはパブリックの
ユーザー定義型のフィールドとして、使用することはできません。」
どうやらフォーム型変数がまずいようです。
フォーム型変数をオブジェクト型に変えて再コンパイルしても同じ結果でした。何か他の方法があれば教えてください。お願いします。
[ソース]
'任意のフォームのイベントを請負うためイベントを宣言
Dim WithEvents mfrmForm As Form
'フォームとフォームコントロールの参照を受け取るメソッド
Public Sub Connect(frmForm As Form, varControls As Variant)
'任意のフォームオブジェクトを生成
Set mfrmForm = frmForm
'コントロール配列をバリアント型へ代入
mvarControls = varControls
End Sub
’フォームのイベント処理
Private Sub mfrmForm_KeyDown(KeyCode As Integer, Shift As Integer)
'いろいろな処理
End Sub
的外れ?正しい方法かどうかわからないのですが・・・
上記のロジックを元にした場合
Form の定義をバリアントにして定義してDLL作成
参照のEXE側ではWithEventsで以下エラー
オブジェクトはオートメーションイベントを発生させることは出来ません
がでるのでDLL側Class内にダミーのイベントによる関連付け以下を追加
Public Event DmyNotfy()
によりFormのイベントをDLLで取得は可能でした
私自身あまり詳しくないのですが一度試して見てください
ツイート | ![]() |