構造体を引数にした時のエラーを解決するには


hiroshi  2004-11-27 08:59:50  No: 117830

2004/11/19〜で同じ内容の質問をし、回答を頂いて解決したのですが、そのときは.NETにおける場合で、全く同じ事をVB6でどうやって解決したらよいか悩んでいます。
標準モジュールで構造対を宣言し
Module Module1
    Public Structure Kozotai
        *******************
    End Structure
End Module

クラスで、上に定義した構造体を引数にメソドを記述します
Public Class Class1
    Public Sub Enzan(ByVal KK As Kozotai)
  *******************
    End Sub
End Class
フォームのボタンをクリックして、クラスのメソドを使うべく
Private Sub Button1_Click()
        Dim k As Kozotai
        Dim cls As New Class1
        cls.Enzan(k)
End Sub
としてプログラムを走らせるとエラーになります。
この解決方法として  Module Module1 を Public Module Module1  と変更することを教えて頂きましたが、全く同じことをVB6でやろうとすると、そもそも標準モジュールを開いた時に
Module Module1

End Module
なる記述が現れないので直しようがないのです。仕方なく標準モジュールに
Public Type Kozotai
        *******************
End Type
と書いてはみたもののうまくいきません。
具体的解決方法を教えて頂きたく宜しくお願いします。


魔界の仮面弁士  2004-11-28 02:45:15  No: 117831

VB.NETとVB6では文法が違いますから…両方の仕様をよく把握しておかないと、
そのままダウングレードはできません。

事前知識が不足しすぎているような感をうけますので、構造体の引数うんぬんの前に、
まずは、ヘルプのチュートリアル等をもう少し読み直しておかれる事をお勧めします。

> Module Module1
> End Module
> なる記述が現れないので

VB.NETでは、Module〜End Moduleや、Class〜End Classといったブロックにて、
一つの*.vbファイル内に、複数のクラスやモジュールを定義できますよね。

しかしVB6では、これらはファイル単位で定義されます。
一つのクラスモジュール(*.clsファイル)には一つのクラスしか定義できませんし、
標準モジュール(*.basファイル)も同様です。ブロックでの定義はできません。

いずれかのファイルに、Moduleステートメントを使わずに記載してください。

なお、質問中に、構造対と構造体という言葉で出てきていますが、正しくは
「構造体(Structure)」です。VB.NETでは Structure ステートメントで定義します。
VB6では、ユーザー定義型(User Defined Type)がそれに近いものにあたり、こちらは
「Typeステートメント」で定義する事になります。

> と書いてはみたもののうまくいきません。
VB6では、標準モジュールにて宣言したユーザー定義型を、
Public なプロシージャの引数にする事はできません。

この場合は、
・プロシージャのスコープを、Private または Public に下げる。
・ユーザー定義型を、Publicなクラスにて宣言する。
・ユーザー定義型を使うのを諦め、クラスで代用する。
のいずれかの対処が必要となります。


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

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






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