ユーザ定義型(Type)をクラスモジュールのPublicのFunctionの引数の型として使用するにはどのようにすればよいのでしょうか?
現在以下のようなコードでエラーが出てしまいます。
<標準モジュール内>
Public Type UserPoint
X As Long
Y As Long
End Type
<クラスモジュール内>
Public Function test(udtPoint As UserPoint) As Integer
'省略
' ・
' ・
End Function
コンパイルをすると
「パブリックオブジェクトモジュールで定義されたパブリックユーザ定義型に
限り、クラスモジュール内のパブリックユーザ定義型の要素として使用すること
ができます。」
というエラーになります。
ユーザ定義型はPublicで宣言しているのですが、なぜエラーなのでしょうか?
ユーザー定義型を引数にするには、それを構造体としてタイプライブラリにて宣言するか、
もしくは、「InstancingプロパティがPrivate以外に設定してあるクラスモジュール」にて
Public宣言しておく必要があります。
例えば、DirectXで利用される構造体などは、タイプライブラリにて宣言されており、
「パブリックオブジェクトモジュールで定義されたパブリックユーザ定義型」に
相当するため、引数として利用する事ができます。
なお、クラスのInstancingプロパティを変更するには、そのプロジェクトを
ActiveXコンポーネントとして作成する必要があります。もし、ActiveX EXE/DLLには
したくない、という事であれば、そもそもプロシージャをPublicで宣言する必要は
無いでしょうから、それをFriendに格下げしてしまえば十分かと思います。
ありがとうございました。
Friend で宣言することで解決しました。
ツイート | ![]() |