呼び出し側のデータ型のチェック

返信する


答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: 呼び出し側のデータ型のチェック

by 7 » 2006年11月18日(土) 00:58

> 関数内で引数を弄ろうとすると問題がおきるようです。
引数は弄ってないので大丈夫ですよ。String型を指定したらTRUEを返し、BytePtr型を指定したらFALSEを返す関数を作っただけですので。

by 高信期 » 2006年11月17日(金) 23:45

>7さん
関数内で引数を弄ろうとすると問題がおきるようです。
http://www.activebasic.com/forum/viewtopic.php?t=1592

by konisi » 2006年11月17日(金) 19:14

その関数の場合は、lpStr変数はBytePtr型ローカル変数なので確実にBytePtr型だと言えます。

呼び出し側のデータ型のチェック

by KICO » 2006年11月17日(金) 18:21

のぶあや様、7様、Konisi様、ありがとう御座います。

コード: 全て選択

test(str)	'String型
test(buf)	'BytePtr型

Sub test(lpStr As BytePtr)
 ' lpStrが受け取ったデータ型が、String型かBytePtr型なのか知る方法
End Sub
  この題名では、解りづらかったようでゴメンなさい。

呼び出し側のデータ型のチェック

by KICO » 2006年11月17日(金) 18:14

高信期様、ありがとう御座います。
不可能でしょう。…
現状では文字列を保持する型を一つに縛り、
将来的に関数のoverloadで対処するのがよいと思います。
 イグトランス (egtra)様も同様な事、仰っていました。
私だったら,多くのWindows APIの関数がそうであるようにBytePtr型の引数と,その大きさを示す変数を取る関数を作り,
別途String型を受け取る版の関数を作ります。
(GetWindowTextとGetWindowTextStrのように)
 指定変数に格納又は、書き換える場合は、String型、BytePtr型と分けて作るべきなのですね。

by 7 » 2006年11月17日(金) 18:14

> 現在のバージョンではオブジェクトを引数にした関数のoverloadは出来ないのを忘れていました。
???
よく意味も分からず書きますけど、以下のように書いてString型かBytePtr型か判断できたと思います。
ActiveBasic 5.0 CP3

コード: 全て選択

Function IsString(ByVal lpString As String) As BOOL
	Return TRUE
End Function

Function IsString(ByVal lpString As BytePtr) As BOOL
	Return FALSE
End Function

Dim lpStr As BytePtr
Dim strStr As String
Dim bStr As BOOL

	bStr=IsString(lpStr)
	Debug

	bStr=IsString(strStr)
	Debug

by のぶあや » 2006年11月17日(金) 09:57

Len関数を使えば何とかなります(条件付ですが・・・)

コード: 全て選択

Dim str As String, lp As BytePtr
Print Len(str), Len(lp)
このようにやれば「0 4」のように表示されると思います。
要するにLen関数にデータを渡してやり、戻り値が4ならBytePtr型(もしくは4文字格納されたString型)、4以外ならString型ということになります。

ただこの場合だと文字列が半角4文字の場合判別ができません。
この方法以外には思いつきませんがどうでしょう?

by 高信期 » 2006年11月17日(金) 00:59

現在のバージョンではオブジェクトを引数にした関数のoverloadは出来ないのを忘れていました。
失礼いたしました。
というわけで、現状では文字列を保持する型を一つに縛り、
将来的に関数のoverloadで対処するのがよいと思います。

by 高信期 » 2006年11月17日(金) 00:48

不可能でしょう。
というか、関数のoverloadで解決できませんか?

呼び出し側のデータ型のチェック

by KICO » 2006年11月16日(木) 23:58

 何時も、お世話に成っています。

 文字列を受け取った際、そのデータ型が String型かBytePtr型なのか、
チェックは出来ないのでしょうか?

 宜しくお願いします。

ページトップ