VB6の便利なようで不自由な仕様に苦戦してるぅ。
とりあえず解決できたので、今日はぐっすり寝れそうです。
進捗の遅れはそろそろ無視できないレベルになってきたけどね(汗)
正しいか怪しいけれど、動いたので忘れないうちにメモ。
[VB6] 構造体を関数の引数/戻り値に指定する **********
●TestModule.bas
上記のような定義をした場合、コンパイル時に下記エラーメッセージが表示される。
「パブリック オブジェクト モジュールで定義されたパブリック ユーザー定義型に限り、クラス モジュール内のパブリック プロシージャの引数または戻り値、またはパブリック ユーザ定義型の要素として使用することができます。」
回避方法として
(1)関数のアクセス修飾子を構造体よりスコープより狭いものに変更する。
×Public ⇒ ○Friend, Private
(2)構造体をクラスに変更し、関数の引数をクラスオブジェクトに変更する。
[VB6] C/C++に文字列のポインタを渡す **********
参照渡しは「ByRef」を指定するけど、String型をそのまま参照渡しをすると落ちる。
String型をByte型配列に変換し、Byte型配列の先頭要素の参照を渡す。
とりあえず解決できたので、今日はぐっすり寝れそうです。
進捗の遅れはそろそろ無視できないレベルになってきたけどね(汗)
正しいか怪しいけれど、動いたので忘れないうちにメモ。
[VB6] 構造体を関数の引数/戻り値に指定する **********
●TestModule.bas
Public Type testStruct Param1 As String Param2 As Integer ... End Type ●TestClass.cls Public Function TestFunction(ByRef rStruct As testStruct) As Integer ... 略 ... End Function
上記のような定義をした場合、コンパイル時に下記エラーメッセージが表示される。
「パブリック オブジェクト モジュールで定義されたパブリック ユーザー定義型に限り、クラス モジュール内のパブリック プロシージャの引数または戻り値、またはパブリック ユーザ定義型の要素として使用することができます。」
回避方法として
(1)関数のアクセス修飾子を構造体よりスコープより狭いものに変更する。
×Public ⇒ ○Friend, Private
(2)構造体をクラスに変更し、関数の引数をクラスオブジェクトに変更する。
[VB6] C/C++に文字列のポインタを渡す **********
参照渡しは「ByRef」を指定するけど、String型をそのまま参照渡しをすると落ちる。
String型をByte型配列に変換し、Byte型配列の先頭要素の参照を渡す。