ab.com コミュニティ

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

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




返信する
ユーザー名:
件名:
メッセージ本文:
メッセージを入力してください。60000 字まで入力できます。 

フォントサイズ:
フォントカラー
オプション:
BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF
BBCode を無効にする
URL を自動的にパースしない
クイズ
お手数ですがカタカナで「エービー」と4文字を入力してください。:
答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。
   

トピックのレビュー - GetDWord関数のオーバーロード
作成者 メッセージ
  記事の件名:  Re:  引用付きで返信する
イグトランス (egtra)様、ありがとう御座います。
引用:
そもそもBytePtr型の引数を受け取るところに,String型の変数が渡された場合を処理しようということで,無理が生じてしまいます。
 呼び出し側のデータ型のチェックが出来れば、一つの関数で使い分けしなくて良いのでやっていましたが、無理な様ですね。

 「呼び出し側のデータ型のチェック」に、ついて 「プログラミング質問板」で、質問させて頂きます。

宜しくお願い致します。
投稿記事 Posted: 2006年11月16日(木) 23:48
  記事の件名:   引用付きで返信する
そもそもBytePtr型の引数を受け取るところに,String型の変数が渡された場合を処理しようということで,無理が生じてしまいます。

私だったら,多くのWindows APIの関数がそうであるようにBytePtr型の引数と,その大きさを示す変数を取る関数を作り,
別途String型を受け取る版の関数を作ります。
(GetWindowTextとGetWindowTextStrのように)
投稿記事 Posted: 2006年11月16日(木) 21:36
  記事の件名:  GetDWord関数のオーバーロード  引用付きで返信する
 OverTaker様、ありがとう御座います。
引用:
以前String型は、文字列の先頭の前にサイズを表していたので、このような荒技的なコードが使用できました。
しかし、現在はWikiで見ると分かりますが、String型はコンパイラ定義ではなく、Stringクラスとして、ライブラリで提供されるようになりました。これにより、以前とは違ったStringクラスとなりましたので、その方法は使用できません。
 それでVer5以降は使用できなかったのですね。(バグではなかったのですね、失礼致しました。)
引用:
このコードはちょっと意外ですね。…
 String型文字列をポインタ渡しで受け取った場合、lstrlen ではEOS(End Of String)までの
バイト数は得られますが、ZeroString で確保したバイト数は、Len では得られないので
GetDWord を使用しました。
HeapSize関数に関する質問は、http://www.activebasic.com/forum/viewtopic.php?t=1678
「プログラミング質問板」で質問させて頂いていますので、そちらの方も宜しくお願い致します。
投稿記事 Posted: 2006年11月15日(水) 20:43
  記事の件名:   引用付きで返信する
こんにちは、OverTakerです。
KICOさんの察した通り、Stringの仕様が変更になったため、このようなことが起こります。
コード:
Dim str  As String 
Dim size As Long 

str  = ZeroString(20) 
size = GetDWord(str - SizeOf(DWord)) 
このコードはちょっと意外ですね。以前String型は、文字列の先頭の前にサイズを表していたので、このような荒技的なコードが使用できました。
しかし、現在はWikiで見ると分かりますが、String型はコンパイラ定義ではなく、Stringクラスとして、ライブラリで提供されるようになりました。これにより、以前とは違ったStringクラスとなりましたので、その方法は使用できません。

文字列のサイズを取得する方法としては、以下の方法があります。
コード:
#console
Dim s As String
s = "ActiveBasic"
Print Len(s)
Print lstrlen(s)
Print s.Length
Sleep(1000)
他にもあるかもしれませんが、一番下のやり方はStringクラスで使用することができます。上の2つは、以前のコンパイラでも使用することができます。
現在のStringクラスはまだ完全ではありませんので、s.Lengthに値が書き込めてしまうのですが、誤作動を起こすのでそのようなコードは書かないようにしてください。
投稿記事 Posted: 2006年11月15日(水) 16:34
  記事の件名:  GetDWord関数のオーバーロード  引用付きで返信する
 何時も、お世話に成っています。
コード:
Dim str  As String
Dim size As Long

str  = ZeroString(20)
size = GetDWord(str - SizeOf(DWord))
 Ver3.13では、size = 20 と取得出来ますが、

 Ver4.24では、エラー:「型が違います」 と、成り
(size = GetDWord(StrPtr(str) - SizeOf(DWord))とすれば、size = 20 と取得出来ます。)

 Ver5cp3 及び、Ver5β6では、エラー:「"Operator -" は定義されていません。」 と、成ります。
(size = GetDWord(StrPtr(str) - SizeOf(DWord))とすれば、エラーには成りませんが、
size = 20 と取得出来ません。)

 http://dev.activebasic.com/dai/?m=200607 (CStringクラス)

 仕様が変わったのでしょうか?

 宜しくお願いします。
投稿記事 Posted: 2006年11月15日(水) 12:48

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


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