すたみなあっぷ

Are You 愚民?
Yes! I'm 愚民!

メモ

2008年04月11日 18時12分25秒 | Tips
VB6の便利なようで不自由な仕様に苦戦してるぅ。
とりあえず解決できたので、今日はぐっすり寝れそうです。
進捗の遅れはそろそろ無視できないレベルになってきたけどね(汗)

正しいか怪しいけれど、動いたので忘れないうちにメモ。

[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型配列の先頭要素の参照を渡す。