ファイル名を分割した後に落ちる

ActiveBasicのバグと思われる不具合を発見された方は、こちらから知らせていただけると助かります。
返信する
メッセージ
作成者
Cursol

ファイル名を分割した後に落ちる

#1 投稿記事 by Cursol »

ステップ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
記事: 203
登録日時: 2005年5月31日(火) 20:14
お住まい: 兵庫県
連絡する:

Re: ファイル名を分割した後に落ちる

#2 投稿記事 by hira »

コード: 全て選択

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

確認しました

#3 投稿記事 by Cursol »

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