ab.com コミュニティ
https://www.activebasic.com/forum/

ファイル名を分割した後に落ちる
https://www.activebasic.com/forum/viewtopic.php?t=104
ページ 11

作成者:  Cursol [ 2005年6月12日(日) 03:25 ]
記事の件名:  ファイル名を分割した後に落ちる

ステップ11 「テキスト エディタを作る」の「開く」メニュー イベントの

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

のあとに以下のコードを追加しタイトルバーにファイル名を表示させようとしました

  'タイトルバーにファイル名を表示
    Dim DrivePath As String
    Dim DirPath As String
    Dim Fname As String
    Dim ExName As String

    _splitpath(FileName, DrivePath, DirPath, Fname, ExName)
    SetWindowText(hMainWnd, Fname)

デバックで動作を確認すると、メニューからファイルを開くを選らび目的のファイルを選択し開いた瞬間に落ちてしまいます。このときにエラーはでませんでした。

因みに
    SetWindwoText(hMainWnd, FileName)
だけならフルパスのファイル名がタイトルバーに設定されました

また、ファイル名を分割した後
    MessageBox(0,Fname,"",MB_OK)
で確認する事まではできました。しかしOKを押した後ですぐに落ちてしまいました。理由がわからずバグかと思われましたのでここに投稿させていただきます。

作成者:  hira [ 2005年6月12日(日) 12:09 ]
記事の件名:  Re: ファイル名を分割した後に落ちる

コード:
Dim Fname As String
Fname = ZeroString(MAX_PATH)
_splitpath(FileName, NULL, NULL, Fname, NULL)
のようにしなければなりません。
_splitpath関数(に限りませんが)で文字列を返してもらうときには、返してもらう変数に領域を確保しないとエラーか強制終了になります(これを行うのがZeroStringの行)。
また、取得しなくてもいい要素は、NULLを指定して受け取らないようにすることができます。私が書いた_splitpathの行でNULLが3つもあるのはそういうことです。
もし他の要素も欲しい場合、文字列変数にZeroString関数で適当な領域(サイズがわからなければMAX_PATHだけあれば確実)を確保し、それを引数に指定してください。

つまり、ABのバグではありません(^^;

作成者:  Cursol [ 2005年6月12日(日) 14:52 ]
記事の件名:  確認しました

詳しく教えて頂きありがとうございました、こちらでも動作を確認しました。
しかし、コードの上の方で似たようなことやってながら全く気が付かなかった。OTL

ページ 11 全ての表示時間は UTC+09:00 です
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/