クラスモジュールへ構造体を渡す(戻す)には?


−TAKASHI−  2005-02-08 20:47:04  No: 119496

お世話になります。

「印刷」に関するクラスモジュールを作成しているのですが
クラスモジュール内で定義しているメソッドへデータ構造を渡したり
逆にデータ構造を戻したりすることは出来ないのでしょうか?

というのも、パラメータとしてデータ構造をメソッドへ渡した際、
「パブリックオブジェクトモジュールで定義されたパブリックユーザ定義型に
限り、クラスモジュール内のパブリックプロシージャの引数又は戻り値、
またはパブリックユーザ定義型の要素としてしようすることが出来ます。」
とのメッセージが表示されました。

具体的な対応策をご教授願います。

現在、以下のソースになっています。

'***** 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


魔界の仮面弁士  2005-02-08 21:22:32  No: 119497

> 「パブリックオブジェクトモジュールで定義されたパブリックユーザ定義型に

外部公開されたユーザ定義型ならば、メソッドの引数に使えるという事です。

つまり、標準モジュールでユーザ定義型を宣言するのではなく、
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ですよ。(^^;


−TAKASHI−  2005-02-08 23:08:01  No: 119498

お疲れさまです。
魔界の仮面弁士さん、早速のご説明ありがとうございます。

現在、ご説明頂いた内容の理解に苦しんでおります(^^;
#現在、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;


魔界の仮面弁士  2005-02-09 00:38:07  No: 119499

> '***** Class Module (Object Name = UPrint)*****
> Option Explicit
> Public Function fnInitialize( prmData As TyPrintInfo ) As Boolean

まず、これが本当にPublicにする必要があるのか、を考えて見ましょう。
Friend Functionで十分だったりはしませんか?


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加