ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年4月28日(日) 15:07

全ての表示時間は UTC+09:00 です




新しいトピックを投稿する  トピックへ返信する  [ 10 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 2006年11月16日(木) 23:58 
オフライン

登録日時: 2005年12月13日(火) 17:42
記事: 57
 何時も、お世話に成っています。

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

 宜しくお願いします。


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2006年11月17日(金) 00:48 
不可能でしょう。
というか、関数のoverloadで解決できませんか?


通報する
ページトップ
   
 記事の件名:
投稿記事Posted: 2006年11月17日(金) 00:59 
現在のバージョンではオブジェクトを引数にした関数のoverloadは出来ないのを忘れていました。
失礼いたしました。
というわけで、現状では文字列を保持する型を一つに縛り、
将来的に関数のoverloadで対処するのがよいと思います。


通報する
ページトップ
   
 記事の件名:
投稿記事Posted: 2006年11月17日(金) 09:57 
オフライン

登録日時: 2006年10月14日(土) 10:52
記事: 22
お住まい: 愛知
Len関数を使えば何とかなります(条件付ですが・・・)
コード:
Dim str As String, lp As BytePtr
Print Len(str), Len(lp)
このようにやれば「0 4」のように表示されると思います。
要するにLen関数にデータを渡してやり、戻り値が4ならBytePtr型(もしくは4文字格納されたString型)、4以外ならString型ということになります。

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


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2006年11月17日(金) 18:14 
オフライン

登録日時: 2005年5月31日(火) 18:51
記事: 473
お住まい: 新潟県
> 現在のバージョンではオブジェクトを引数にした関数の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


通報する
ページトップ
投稿記事Posted: 2006年11月17日(金) 18:14 
オフライン

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


通報する
ページトップ
投稿記事Posted: 2006年11月17日(金) 18:21 
オフライン

登録日時: 2005年12月13日(火) 17:42
記事: 57
のぶあや様、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 回

通報する
ページトップ
 記事の件名:
投稿記事Posted: 2006年11月17日(金) 19:14 
オフライン

登録日時: 2005年7月25日(月) 13:27
記事: 893
お住まい: 埼玉県東松山市
その関数の場合は、lpStr変数はBytePtr型ローカル変数なので確実にBytePtr型だと言えます。

_________________
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

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


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2006年11月17日(金) 23:45 
>7さん
関数内で引数を弄ろうとすると問題がおきるようです。
http://www.activebasic.com/forum/viewtopic.php?t=1592


通報する
ページトップ
   
 記事の件名:
投稿記事Posted: 2006年11月18日(土) 00:58 
オフライン

登録日時: 2005年5月31日(火) 18:51
記事: 473
お住まい: 新潟県
> 関数内で引数を弄ろうとすると問題がおきるようです。
引数は弄ってないので大丈夫ですよ。String型を指定したらTRUEを返し、BytePtr型を指定したらFALSEを返す関数を作っただけですので。


通報する
ページトップ
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 10 件の記事 ] 

全ての表示時間は UTC+09:00 です


オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[15人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by ocean