初めまして、最近ActiveBasicを始めた初心者です。
表題の件につきまして、知恵をお貸し頂けませんでしょうか。
Win32プログラミング講座にあるテキストエディタを作ってみたのですが、
ファイルオープンダイアログを2~4回開くとアクセス違反で終了してしまいます。
コンパイル時にエラー、警告は出ていません。
リリースコンパイルを行った場合でも、同様に2~4回開くと落ちました。
また、サンプルプロジェクトのテキストエディタでも同様の現象が起こりました。
過去ログで報告のありましたComputer Browser, Server, Workstationについては開始させ、
"GetOpenFileNameでエラーが出る方へ(XPで)"のトピックに従ってOPENFILENAME構造体も書き換えましたが
状況は変わりませんでした。
何とか解決する方法はありませんでしょうか。
よろしくお願いします。
WinXP Home SP2
ActiveBasic 4.24.00
原因がよく分からないアクセス違反
その、ファイルオープンの部分も含めて、もしよければ問題の関数丸ごと掲載できませんか?
BytePtr型で操作する部分でString型で適当に対処すると、コードによってはアクセス違反を起こすことがあります。
BytePtr型で操作する部分でString型で適当に対処すると、コードによってはアクセス違反を起こすことがあります。
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
これが問題のコードです。
汚くてすいませんが、よろしくお願いします。
もしかしたら別の所にも問題があるのかもしれませんが……。
汚くてすいませんが、よろしくお願いします。
[ここをクリックすると内容が表示されます]
ただ、付属サンプルのテキストエディタでも発生するので、コード: 全て選択
Sub MainWnd_IDM_OPEN_MenuClick()
dim hEdit as HANDLE
dim hOpenFile as HANDLE
dim ofn as OPENFILENAME
dim pszFileName as *Byte
dim dwFileSize as DWORD
dim dwAccessByte as DWORD
dim buff as *Byte
'ファイル名用メモリ確保
pszFileName = calloc(MAX_PATH)
if(pszFileName = NULL) then Exit Sub
'構造体の初期化
FillMemory(VarPtr(ofn), sizeof(OPENFILENAME), 0)
with ofn
.lStructSize = sizeof(OPENFILENAME)
.hwndOwner = hMainWnd
.lpstrFilter = Ex"テキスト ファイル(*.txt)\0*.txt\0すべてのファイル(*.*)\0*\0\0"
.nFilterIndex = 1
.lpstrFile = pszFileName
.nMaxFile = MAX_PATH
.lpstrTitle = "Open file"
.Flags = OFN_FILEMUSTEXIST or OFN_HIDEREADONLY or OFN_PATHMUSTEXIST
.lpstrDefExt="*"
end with
'ファイル選択
if (GetOpenFileName(ofn) = 0) then
free(pszFileName)
Exit Sub
end if
hOpenFile = CreateFile(ofn.lpstrFile, GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE, ByVal NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)
if(hOpenFile = INVALID_HANDLE_VALUE) then
MessageBox(hMainWnd, "オープン失敗", "TextEditor", MB_OK)
free(pszFileName)
Exit Sub
end if
'ファイルサイズ取得
dwFileSize = GetFileSize(hOpenFile, NULL)
buff = calloc(dwFileSize + 1)
if(buff = NULL) then
CloseHandle(hOpenFile)
free(pszFileName)
Exit Sub
end if
'ファイル内容をバッファにコピー
ReadFile(hOpenFile, buff, dwFileSize, VarPtr(dwAccessByte), ByVal NULL)
CloseHandle(hOpenFile)
'エディットボックスに反映
hEdit = GetDlgItem(hMainWnd, EditBox1)
SetWindowText(hEdit, buff)
SetFocus(hEdit)
free(buff)
free(pszFileName)
End Sub
もしかしたら別の所にも問題があるのかもしれませんが……。
すみませんが、こちらでは現象を再現できませんでした。
だれか現象を再現できる人はいますか?
AB4.24
WinXP Home SP2
だれか現象を再現できる人はいますか?
AB4.24
WinXP Home SP2
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。