ページ 1 / 1
引数に関数などを書くと
Posted: 2006年10月10日(火) 09:06
by MML
VerはActiveBasic 5(CP3)です。
以下のコードを打つと、エラーがでます。
これは4やCP1では起こりませんでした。なぜですか?
コード: 全て選択
MsgBox hMainWnd,"hMainWnd = "+Str$(hMainWnd)
でなぜかコンパイルエラーになってしまいます。。
CP2でも起こりました。
Posted: 2006年10月10日(火) 18:53
by konisi
String型の定義が変更されたことによるエラーの一つに「固定文字列+String型の演算結果をString型に代入できない」と言う内容のものがあったと思うのですが・・・。
どうでしたっけ?
追記(最終改変:19時20分)
AB5の開発者バージョンの一つのβ3での話でした。β3はCP1より後、CP2より前に一部に発表されています。引用すると
こんなことがありました。 [ここをクリックすると内容が表示されます] [ここをクリックすると非表示にします](省略されている)
konisi さんが書きました:定数的文字列同士の加算(?)が出来ません。
コード: 全て選択
Dim A$ As String
A$="test"+"ahya"
山本(管理人) さんが書きました:【"test"+"123" などのLPSTR型のポインタ同士をStringオブジェクトとして認識しない】
演算子オーバーロードの特性上、+演算子から見て左の項にString型オブジェクトがなければなりません。となると、最悪 "test" + StrObj などの演算が行えなくなるのでは!?といった問題が生じますが、β4では要求値がStringオブジェクトの場合は文字列リテラルをStringオブジェクトとして扱うようにしようかと考えています。
ようは、下記のようなケースでリテラル文字列とリテラルStringオブジェクトを識別していこうという考えです。
コード: 全て選択
Dim obj As String
obj="test"+"123" '"test" 及び "123" をString型オブジェクトとして扱う
コード: 全て選択
Dim buffer As LPSTR
buffer="test123" '"test123" をリテラル文字列として扱う
因みに、ここで言うリテラル文字列とは、プロセスメモリ内に用意されるByte型配列データへのポインタになります。当然ながら、Stringオブジェクトは処理にオーバーヘッドを伴うので、高速文字列処理が必要なときはLPSTRやリテラル文字列を扱うことで回避できると考えています。
(ちなみに、CP3の一般公開の前にβ5が一部に発表されている。)
これは演算に対する返り値の話ですが、おそらくこれとほぼ同じ事が関数への引数に対して起こっているものかと思います。
Posted: 2006年10月10日(火) 19:26
by situmon
どのようなエラー内容ですか?
こちらで試しましたが、警告こそ出ますが、エラーは出ませんでした。(厳密な型チェック有効時)
もし、警告のことを指しているならば、
コード: 全て選択
MsgBox hMainWnd,"hMainWnd = "+Str$(hMainWnd)
このコードを
コード: 全て選択
MsgBox hMainWnd,"hMainWnd = "+Str$(hMainWnd As Double)
このように型をキャストしてやることで、警告を抑えられます。
的外れだったらすみません。
Posted: 2006年10月10日(火) 20:56
by konisi
あ、ほんとだ。エラー出ないや。←未確認だった。
Posted: 2006年10月15日(日) 14:40
by MML
>
コード: 全て選択
MsgBox hMainWnd,"hMainWnd = "+Str$(hMainWnd As Double)
>
あ、、出ませんね。。。
知りませんでした。ありがとうございました。