呼び出し側のデータ型のチェック
呼び出し側のデータ型のチェック
何時も、お世話に成っています。
文字列を受け取った際、そのデータ型が String型かBytePtr型なのか、
チェックは出来ないのでしょうか?
宜しくお願いします。
文字列を受け取った際、そのデータ型が String型かBytePtr型なのか、
チェックは出来ないのでしょうか?
宜しくお願いします。
Len関数を使えば何とかなります(条件付ですが・・・)
このようにやれば「0 4」のように表示されると思います。
要するにLen関数にデータを渡してやり、戻り値が4ならBytePtr型(もしくは4文字格納されたString型)、4以外ならString型ということになります。
ただこの場合だと文字列が半角4文字の場合判別ができません。
この方法以外には思いつきませんがどうでしょう?
コード: 全て選択
Dim str As String, lp As BytePtr
Print Len(str), Len(lp)
要するにLen関数にデータを渡してやり、戻り値が4ならBytePtr型(もしくは4文字格納されたString型)、4以外ならString型ということになります。
ただこの場合だと文字列が半角4文字の場合判別ができません。
この方法以外には思いつきませんがどうでしょう?
> 現在のバージョンではオブジェクトを引数にした関数のoverloadは出来ないのを忘れていました。
???
よく意味も分からず書きますけど、以下のように書いてString型かBytePtr型か判断できたと思います。
ActiveBasic 5.0 CP3
???
よく意味も分からず書きますけど、以下のように書いて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
呼び出し側のデータ型のチェック
高信期様、ありがとう御座います。
イグトランス (egtra)様も同様な事、仰っていました。不可能でしょう。…
現状では文字列を保持する型を一つに縛り、
将来的に関数のoverloadで対処するのがよいと思います。
指定変数に格納又は、書き換える場合は、String型、BytePtr型と分けて作るべきなのですね。私だったら,多くのWindows APIの関数がそうであるようにBytePtr型の引数と,その大きさを示す変数を取る関数を作り,
別途String型を受け取る版の関数を作ります。
(GetWindowTextとGetWindowTextStrのように)
その関数の場合は、lpStr変数はBytePtr型ローカル変数なので確実にBytePtr型だと言えます。
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。