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

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
KICO
記事: 57
登録日時: 2005年12月13日(火) 17:42

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

#1 投稿記事 by KICO »

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

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

 宜しくお願いします。
高信期

#2 投稿記事 by 高信期 »

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

#3 投稿記事 by 高信期 »

現在のバージョンではオブジェクトを引数にした関数のoverloadは出来ないのを忘れていました。
失礼いたしました。
というわけで、現状では文字列を保持する型を一つに縛り、
将来的に関数のoverloadで対処するのがよいと思います。
のぶあや
記事: 22
登録日時: 2006年10月14日(土) 10:52
お住まい: 愛知

#4 投稿記事 by のぶあや »

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

コード: 全て選択

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

ただこの場合だと文字列が半角4文字の場合判別ができません。
この方法以外には思いつきませんがどうでしょう?
7
記事: 473
登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県
連絡する:

#5 投稿記事 by 7 »

> 現在のバージョンではオブジェクトを引数にした関数の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
KICO
記事: 57
登録日時: 2005年12月13日(火) 17:42

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

#6 投稿記事 by KICO »

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

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

#7 投稿記事 by KICO »

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

コード: 全て選択

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

Sub test(lpStr As BytePtr)
 ' lpStrが受け取ったデータ型が、String型かBytePtr型なのか知る方法
End Sub
  この題名では、解りづらかったようでゴメンなさい。
最後に編集したユーザー KICO [ 2006年11月17日(金) 19:29 ], 累計 1 回
konisi
記事: 893
登録日時: 2005年7月25日(月) 13:27
お住まい: 埼玉県東松山市
連絡する:

#8 投稿記事 by konisi »

その関数の場合は、lpStr変数はBytePtr型ローカル変数なので確実にBytePtr型だと言えます。
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
高信期

#9 投稿記事 by 高信期 »

>7さん
関数内で引数を弄ろうとすると問題がおきるようです。
http://www.activebasic.com/forum/viewtopic.php?t=1592
7
記事: 473
登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県
連絡する:

#10 投稿記事 by 7 »

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