サンプルのテキストエディタで読み込みができない

返信する


答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: サンプルのテキストエディタで読み込みができない

by まさ328 » 2007年5月24日(木) 19:34

Dim buffer As *Byte

buffer=calloc(dwFileSize+1)
ありがとうございます。うまくいきました!

by konisi » 2007年5月24日(木) 17:39

よくみるとこれ動く方が凄いコードですね。
下のように書いてみてください。

コード: 全て選択

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 *Byte

    '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=calloc(dwFileSize+1)

    'ファイルの内容を文字列変数bufferに読み込む
    ReadFile(hFile,buffer,dwFileSize,VarPtr(dwAccessByte),ByVal 0)

    'ファイル ハンドルを閉じる
    CloseHandle(hFile)

    '-------------------


    'EditBox1のハンドルを取得
    hEdit=GetDlgItem(hMainWnd, EditBox1)

    'hEditにバッファをセットする
    SetWindowText(hEdit,buffer)

    'hEditにフォーカスをセット
    SetFocus(hEdit)

    free(buffer)
End Sub

by まさ328 » 2007年5月24日(木) 14:49

ブレークしたら、bufferに何が代入されているか確認してください。
buffer の中身は””で何も入っていませんでした。

その前のコードで
'ファイルサイズを取得
dwFileSize=GetFileSize(hFile,0)

'文字列バッファ用のメモリを確保
buffer=ZeroString(dwFileSize)

'ファイルの内容を文字列変数bufferに読み込む
ReadFile(hFile,buffer,dwFileSize,VarPtr(dwAccessByte),ByVal 0)

とあるのですが、
dwFileSizeはエクスプローラー等でファイルのプロパティから調べたサイズが
入っているので、ここまでは正常のようです。

どこがまずいのでしょう?

by ゲスト » 2007年5月24日(木) 14:20

SetWindowText(hEdit,buffer)の前か後の行に
debug
を1行追加してデバッグ実行をしてみましょう。
ブレークしたら、bufferに何が代入されているか確認してください。

サンプルのテキストエディタで読み込みができない

by まさ328 » 2007年5月24日(木) 13:42

ヘルプセンターにあるWin32プログラミング講座-Step11. テキスト エディタを作る
にあるテキストエディターのサンプルプログラムなのですが、
ファイルの読み込みだけうまくいきません。

保存やコピー・ペースト他はサンプル通り動くのですが、テキストファイルを
読み込んでも、何も表示されません。

Sub MainWnd_IDM_OPEN_MenuClick()の中の
SetWindowText(hEdit,buffer)

SetWindowText(hEdit,"TEST")
とかに書き換えるとちゃんとTESTと表示されるのでbufferに何も入って
いないのかなぁと思うのですが、今回のようなケース、なにか別に設定しなければ
いけないことがあるのでしょうか?

AB自体、まだ使い始めて日も浅く、慣れていないのでとんでもないミスを
している可能性もあるのですが・・・

ページトップ