文字列演算子&定数について
Posted: 2005年11月24日(木) 19:18
ABのバージョンを4.11.03に上げて使ってから気が付いて、ABだけの問題だけではないと思うのですが、lstrcpy関数の「lpString2 As BytePtr」の部分で文字列演算子の+が無効になってしまっています。
例えば、なら文字列演算子が有効になるのですが、では無効になってしまいます。どうしてでしょうか。同じ現象の人は返信ください。
「api_system.sbp」に記述されている定数のことですが、その中ではファイル属性の定数は以下のようになっています。しかし、この定数を使いGetFileAttributes関数の戻り値をAnd演算子で判定してみてもうまく出来ません。そこで、このように読み替えてやってみるとうまくいきます。例:デバッグしてGetFileAttributes関数の戻り値を見ると「&H20」「&H24」のように先頭の0はついていないので0をつけたのが原因だと思います。
これは僕の環境だけでしょうか。
もし違うならよければ修正をお願いいたします。
WindowsXPSP2
AB 4.11.03
例えば、
コード: 全て選択
lstrcpy(lpszFileName, lpszFileName & "." & lpszExt)
コード: 全て選択
lstrcpy(lpszFileName, lpszFileName + "." + lpszExt)
「api_system.sbp」に記述されている定数のことですが、その中ではファイル属性の定数は以下のようになっています。
コード: 全て選択
Const FILE_ATTRIBUTE_READONLY = &H00000001
Const FILE_ATTRIBUTE_HIDDEN = &H00000002
Const FILE_ATTRIBUTE_SYSTEM = &H00000004
Const FILE_ATTRIBUTE_DIRECTORY = &H00000010
Const FILE_ATTRIBUTE_ARCHIVE = &H00000020
Const FILE_ATTRIBUTE_ENCRYPTED = &H00000040
Const FILE_ATTRIBUTE_NORMAL = &H00000080
Const FILE_ATTRIBUTE_TEMPORARY = &H00000100
Const FILE_ATTRIBUTE_SPARSE_FILE = &H00000200
Const FILE_ATTRIBUTE_REPARSE_POINT = &H00000400
Const FILE_ATTRIBUTE_COMPRESSED = &H00000800
Const FILE_ATTRIBUTE_OFFLINE = &H00001000
コード: 全て選択
FILE_ATTRIBUTE_READONLY = &H1
FILE_ATTRIBUTE_HIDDEN = &H2
FILE_ATTRIBUTE_SYSTEM = &H4
FILE_ATTRIBUTE_DIRECTORY = &H10
FILE_ATTRIBUTE_ARCHIVE = &H20
FILE_ATTRIBUTE_ENCRYPTED = &H40
FILE_ATTRIBUTE_NORMAL = &H80
FILE_ATTRIBUTE_TEMPORARY = &H100
FILE_ATTRIBUTE_SPARSE_FILE = &H200
FILE_ATTRIBUTE_REPARSE_POINT = &H400
FILE_ATTRIBUTE_COMPRESSED = &H800
FILE_ATTRIBUTE_OFFLINE = &H1000
コード: 全て選択
dwFileAttributes=GetFileAttributes(lpszFilePath)
If (dwFileAttributes And FILE_ATTRIBUTE_READONLY)=&H1 Then
EnableWindow(GetDlgItem(hDivideDlg, Static_ReadOnlyAttrib), 1)
End If
If (dwFileAttributes And FILE_ATTRIBUTE_HIDDEN)=&H2 Then
EnableWindow(GetDlgItem(hDivideDlg, Static_HidAttrib), 1)
End If
If (dwFileAttributes And FILE_ATTRIBUTE_SYSTEM)=&H4 Then
EnableWindow(GetDlgItem(hDivideDlg, Static_SystemAttrib), 1)
End If
If (dwFileAttributes And FILE_ATTRIBUTE_ARCHIVE)=&H20 Then
EnableWindow(GetDlgItem(hDivideDlg, Static_ArcAttrib), 1)
End If
If (dwFileAttributes And FILE_ATTRIBUTE_ENCRYPTED)=&H40 Then
EnableWindow(GetDlgItem(hDivideDlg, Static_EncryptAttrib), 1)
End If
If (dwFileAttributes And FILE_ATTRIBUTE_NORMAL)=&H80 Then
EnableWindow(GetDlgItem(hDivideDlg, Static_NoAttrib), 1)
End If
If (dwFileAttributes And FILE_ATTRIBUTE_TEMPORARY)=&H100 Then
EnableWindow(GetDlgItem(hDivideDlg, Static_TempAttrib), 1)
End If
If (dwFileAttributes And FILE_ATTRIBUTE_SPARSE_FILE)=&H200 Then
EnableWindow(GetDlgItem(hDivideDlg, Static_SparceAttrib), 1)
End If
If (dwFileAttributes And FILE_ATTRIBUTE_REPARSE_POINT)=&H400 Then
EnableWindow(GetDlgItem(hDivideDlg, Static_ReparceAttrib), 1)
End If
If (dwFileAttributes And FILE_ATTRIBUTE_COMPRESSED)=&H800 Then
EnableWindow(GetDlgItem(hDivideDlg, Static_CompAttrib), 1)
End If
If (dwFileAttributes And FILE_ATTRIBUTE_OFFLINE)=&H1000 Then
EnableWindow(GetDlgItem(hDivideDlg, Static_OfflineAttrib), 1)
End If
これは僕の環境だけでしょうか。
もし違うならよければ修正をお願いいたします。
WindowsXPSP2
AB 4.11.03