ab.com コミュニティ https://www.activebasic.com/forum/ |
|
ReadFileができない https://www.activebasic.com/forum/viewtopic.php?t=1347 |
ページ 1 / 1 |
作成者: | おのさちま [ 2006年8月13日(日) 05:12 ] |
記事の件名: | ReadFileができない |
既出かもしれませんが検索で見つけられなかったので書かせていただきます ActiveBasic Ver4.24.00を使って、Win32プログラミング講座の11.テキスト エディタを作る にあるコードを入れてみたのですが [ここをクリックすると内容が表示されます]
Sub MainWnd_IDM_OPEN_MenuClick() Dim hEdit As Long Dim ofn As OPENFILENAME Dim hFile As Long Dim dwFileSize As DWord Dim dwAccessByte As DWord Dim FileName[MAX_PATH-1] As Byte Dim buffer As String 'OPENFILENAME構造体の初期化 FillMemory(VarPtr(ofn),Len(ofn),0) ofn.lStructSize=Len(ofn) ofn.hwndOwner=hMainWnd ofn.lpstrFilter=Ex"テキスト ファイル(*.txt)\0*.txt\0すべてのファイル(*.*)\0*\0\0" ofn.nFilterIndex=1 ofn.lpstrFile=FileName ofn.nMaxFile=MAX_PATH ofn.lpstrTitle="ファイルを開く" ofn.Flags=OFN_FILEMUSTEXIST or OFN_HIDEREADONLY or OFN_PATHMUSTEXIST ofn.lpstrDefExt="*" '「ファイルを開く」ダイアログ ボックスを表示 If GetOpenFileName(ofn)=0 Then Exit Sub '------------------- ' ファイル オープン '------------------- hFile=CreateFile(ofn.lpstrFile, GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE, _ ByVal 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0) If hFile=INVALID_HANDLE_VALUE Then MessageBox(hMainWnd,"ファイルオープンに失敗","TextEditor",MB_OK or MB_ICONEXCLAMATION) Exit Sub End If 'ファイルサイズを取得 dwFileSize=GetFileSize(hFile,0) '文字列バッファ用のメモリを確保 buffer=ZeroString(dwFileSize) 'ファイルの内容を文字列変数bufferに読み込む ReadFile(hFile,buffer,dwFileSize,VarPtr(dwAccessByte),ByVal 0) 'ファイル ハンドルを閉じる CloseHandle(hFile) '------------------- 'EditBox1のハンドルを取得 hEdit=GetDlgItem(hMainWnd, EditBox1) 'hEditにバッファをセットする SetWindowText(hEdit,buffer) 'hEditにフォーカスをセット SetFocus(hEdit) End Sub このReadFileなのですが、どうしてもファイルが読めません エラーも出ず、bufferはNULLのままです マニュアルを見ていろいろ試したのですが、うまくいきません 対象ファイル、実行ファイルやAB自体のパスやドライブを変えてみても無理でした このせいでずっとAB放棄していました が!思いついて旧バージョンでためしてみたところ、Ver4.13.00とVer4.12.02では読むことができました Ver4.11.03以前のものは壊れていますと出てプロジェクトが読み込めなかったのでためしていません 5.0も同じでNULLになってしまいます これはなぜでしょうか?バグですか? 4.14から10バージョンも更新されてることからみて私の環境が特殊なんだと思いますが 旧バージョンを使うしかないのでしょうか 対処法か、ヒントでもわかる方いらっしゃいませんか OS:WindowsXP Professional SP2 CPU:AthlonXP 1600+ HDD:40GB(Cドライブ)+200GB(E,F,Gドライブ) |
作成者: | tak [ 2006年8月13日(日) 06:55 ] |
記事の件名: | |
変数 buffer は String 型ですね。これを BytePtr 型にしてみてください。 それから、型の変更に伴って buffer の初期化部分を書き換える必要があります コード: buffer = ZeroString(dwFileSize)ではなく コード: buffer = malloc(dwFileSize) ZeroMemory(buffer, dwFileSize)としてみてはいかがでしょうか。 現在手元にテスト環境が無いので動作検証はしていませんが、あしからず。 String 型と BytePtr 型の互換性に関する問題です。 過去に String 型に対して大きな仕様変更があったことによる混乱が尾を引いているようです。 ちなみに String 型に関して、将来再び大きな仕様改訂が実施される可能性があります。 [参考] http://www.activebasic.com/forum/viewtopic.php?t=996 |
作成者: | 三毛CAT [ 2008年8月08日(金) 16:15 ] |
記事の件名: | 解決法 |
コード: ReadFile(hFile,buffer,dwFileSize,VarPtr(dwAccessByte),ByVal 0)を、 コード: ReadFile(hFile,StrPtr(buffer),dwFileSize,VarPtr(dwAccessByte),ByVal 0)にしたらうまくいきました。 バージョンは4.24.00 |
ページ 1 / 1 | 全ての表示時間は UTC+09:00 です |
Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |