09/10/07 10:02:49
久々に使ってる。
ウィンドウ作成のクラス名でひっかかってたんでメモ
ABでは文字列型はstringで、普通に文字列ポインタを渡すには必ずStrPtr()を通さないといけないのかと思ったが、
直で指定された文字列は普通に・・C言語と同じポインタとして扱われるってのを、コンパイラの強制型変換で気がついた。
まずだめなコード
dim s_szWndClassName = StrPtr("TheWindowIwillCreate")
大丈夫なのは次
1.dim s_szWndClassName as BytePtr
s_szWndClassName = StrPtr("TheWindowIwillCreate" )
s_szWndClassName = StrPtr("TheWindowIwillCreate" as string)
2.dim s_szWndClassName ="TheWindowIwillCreate"
dim s_szWndClassName ="TheWindowIwillCreate" as BytePtr
さらにテストコード。コンパイルには通っても、実際どう管理されているのかは見てみないと分からない。
dim s0 as DWord
s0 = $"test"
s0 = "test"
dim s1 as string
s1 = $"test"
s1 = "test"
dim s2 as BytePtr
s2 = $"test"
dim s3 = $"test"
dim s4 = "test"
[警告] "s3" 型が指定されていません。Double型として扱います。
[警告] "s4" 型が指定されていません。Double型として扱います。
[警告] *ByteからDoubleに強制変換されています。
464:463
09/10/07 13:44:22
↑はミス
初期値を与えた文字列変数をグローバルに持とうと思ったけどうまくいかん。
最初に名前を定義しようと思ったらconst使うしかないのか。
constだとあちこちにコピーが作られそうでいやなんだけどなあ・・・
'dim s_szWndClassName = "test" ' 空白
'dim s_szWndClassName = "test" as string' 空白
'dim s_szWndClassName = "test" as BytePtr' 空白
'dim s_szWndClassName = "test"$ ' バイナリ
'dim s_szWndClassName = Ex"test" ' "n"
const s_szWndClassName = "test" ' ok
465:デフォルトの名無しさん
09/10/07 21:32:08
文字列がちゃんと表示されたのは次のとおりだった。・・・stringでも*Byteでも一緒なのはどういうことだろ。
なんでエラーになってたんだろ。
dim s_szStr2 = "test" as *Byte
dim s_szStr4 = "test" as BytePtr
dim s_szStr as BytePtr
s_szStr = "test"
dim s_szStr as string
s_szStr = "test"
466:デフォルトの名無しさん
09/10/07 21:53:24
関数内で変数宣言したらうまくいくけど、ファイルの先頭でやるとだめだった。
関数を別スレッドで動かしてるからだめなのか、グローバルの変数を壊してるのか、
グローバルだからだめなのか・・・
グローバルはダメだとすると、グローバル変数を使った同期処理ができないことになりそうだが・・・
467:デフォルトの名無しさん
09/10/07 22:31:19
別スレッドを作ってみたけどやっぱり動いた。
ってことは途中でメモリぶっこわしてんのか・・・
ポインタ演算なんかやってないんだけどなあ・・・
関数ポインタ使ったくらいなんだ。
おtt。Export はDLLでしか使わないんだっけ。
でも別に影響ないよな。
DLLだとだめだとかないよな・・・
typedef WNDPROC = *Function(a as HWND, b as DWORD, c as WPARAM, d as LPARAM) as Long
Function Export WindowProc(hWnd as HWND, uMsg as DWORD, wParam as WPARAM, lParam as LPARAM) as Long
Function RegisterWndClass(WndProc as WNDPROC)
wc.lpfnWndProc = WndProc
RegisterWndClass(AddressOf(WindowProc))
468:デフォルトの名無しさん
09/10/08 12:15:17
アホなベーシックやっても就職では何も評価されないよ
やるだけ時間のムダ
マイクロソフトのフリーのコンパイラあるからそれつかったら?
ABもどうせマイクロソフトのコンパイラでガキどもが
趣味でつくってるだけだろwwww