お世話になります。
「印刷」に関するクラスモジュールを作成しているのですが
クラスモジュール内で定義しているメソッドへデータ構造を渡したり
逆にデータ構造を戻したりすることは出来ないのでしょうか?
というのも、パラメータとしてデータ構造をメソッドへ渡した際、
「パブリックオブジェクトモジュールで定義されたパブリックユーザ定義型に
限り、クラスモジュール内のパブリックプロシージャの引数又は戻り値、
またはパブリックユーザ定義型の要素としてしようすることが出来ます。」
とのメッセージが表示されました。
具体的な対応策をご教授願います。
現在、以下のソースになっています。
'***** Class Module (Object Name = UPrint)*****
Option Explicit
Public Function fnInitialize( prmData As TyPrintInfo ) As Boolean
'データ構造の初期化を行なう
'データ構造内のオブジェクト変数に値を設定
'初期化成功時:TRUE 失敗時:FALSE
End Function
'***** Module *****
Option Explicit
Type TyPrintInfo
m_Printer As String
・・・・・・
m_InitErrCode As Integer
m_FilePath As String
・・・・・・
その他、帳票初期化に関するオブジェクト変数
End Type
'***** Form1 *****
Option Explicit
Private Sub Command1_Click()
Dim uPrintObj As UPrint
Dim infPrint As TyPrintInfo New TyPrintInfo
If uPrintObj.fnInitialize(infPrint) = False Then
Select Case infPrint.m_InitErrCode
Case 1
strMsg = "・・・・・"
Case -1
strMsg = "・・・・・"
Case -99
strMsg = "・・・・・"
End Case
MsgBox "[ERROR CODE: " & infPrint.m_InitErrCode & "]" & strMsg
Exit Sub
End If
End Sub
[開発環境]
Windows2000, VisualBasic6.0
> 「パブリックオブジェクトモジュールで定義されたパブリックユーザ定義型に
外部公開されたユーザ定義型ならば、メソッドの引数に使えるという事です。
つまり、標準モジュールでユーザ定義型を宣言するのではなく、
Instancingプロパティを Privte以外に設定したクラスモジュール上にて
宣言すればOKという事です。
> 限り、クラスモジュール内のパブリックプロシージャの引数又は戻り値、
> またはパブリックユーザ定義型の要素としてしようすることが出来ます。」
こちらは、外部公開されていないユーザ定義型の場合でも、
Publicより狭いスコープ(Friend等)のメソッドであればOKという意味です。
Publicスコープが必要なら、ユーザー定義型を公開する。
Publicスコープが不要なら、FriendやPrivateに縮小しましょう。
どちらも駄目なら、ユーザー定義型をクラスに変更しましょう。
> Dim infPrint As TyPrintInfo New TyPrintInfo
この時点で文法エラー……。
> If uPrintObj.fnInitialize(infPrint) = False Then
uPrintObj が Nothingのままなので、実行時エラーに……。
> End Case
End Selectですよ。(^^;
お疲れさまです。
魔界の仮面弁士さん、早速のご説明ありがとうございます。
現在、ご説明頂いた内容の理解に苦しんでおります(^^;
#現在、MSDNの
#「コンポーネントルーツガイド」⇒「VisualBasicドキュメントマップ」⇒
#「プログラミングガイド」⇒「VisualBasicの機能」⇒【プログラミングの詳細】
#【オブジェクト】あたりを参照しています。
クラスモジュールにユーザ定義型を渡す(戻す)サンプルをご存知であれば
参考となるURLをお教え頂けませんか?
> Dim infPrint As TyPrintInfo New TyPrintInfo
>この時点で文法エラー……。
ですね^^; なんでこんな記述したんでしょ・・・(汗)
Dim infPrint As TyPrintInfo ですね。。。
クラスのインスタンスを定義する場合が
Dim uPrintObj As New UPrint でした。。。
> If uPrintObj.fnInitialize(infPrint) = False Then
>uPrintObj が Nothingのままなので、実行時エラーに……。
> End Case
>End Selectですよ。(^^;
うゎ・・・初歩的な記述ミス、、
#コピペをした方が確実でした・・・(T_T;
> '***** Class Module (Object Name = UPrint)*****
> Option Explicit
> Public Function fnInitialize( prmData As TyPrintInfo ) As Boolean
まず、これが本当にPublicにする必要があるのか、を考えて見ましょう。
Friend Functionで十分だったりはしませんか?
ツイート | ![]() |