ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年3月29日(金) 07:37

全ての表示時間は UTC+09:00 です




新しいトピックを投稿する  トピックへ返信する  [ 12 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 2005年5月30日(月) 21:35 
こんばんは。
早速質問ですが、以下のソースをデバッグするとエラーが起こります。
コード:
Function GetFolderPath() As Long
	Dim bi As BROWSEINFO
	Dim pidl As Long

	'BROWSEINFO構造体の初期化
	FillMemory(VarPtr(bi),Len(bi),0)
	bi.hwndOwner=hMainWnd
	bi.lpszTitle="フォルダを選択してください"
	bi.ulFlags=BIF_RETURNONLYFSDIRS

	'「フォルダの参照」ダイアログ?#123;ックスを表示
	pidl=SHBrowseForFolder(bi)

	If pidl Then
		'フォルダへのパスを取得(lpFolderポインタが示すバッファにコピ?#91;)
		SHGetPathFromIDList(pidl, ChosenFolderPath)
		CoTaskMemFree(pidl)
		GetFolderPath=1
		SetDlgItemText(hMainWnd, Static_NowFolderPath, ChosenFolderPath)
	Else
	GetFolderPath=0
	End If
End Function
これをデバッグで実行すると例外処理が出ます。デバッグで突き止めていくと「pidl=SHBrowseForFolder(bi)」の部分でアクセス違反が起こっているようです。
何度も投稿していますが解決しないのでまた投稿します。

二つ目ですが、ある本を見ていた時、「DirectXを使ってパソコンが再生している音楽を録画する」というソフトがありました。
そこでですが、ActiveBasic4.0のDirectXでもこういうことが可能でしょうか?
二つともお答えお願いいたします。


通報する
ページトップ
   
 記事の件名:
投稿記事Posted: 2005年5月30日(月) 21:37 
> これをデバッグで実行すると例外処理が出ます。デバッグで突き止めていくと「pidl=SHBrowseForFolder(bi)」の部分でアクセス違反が起こっているようです。
> 何度も投稿していますが解決しないのでまた投稿します。

私の環境(Windows XP HOME SP2)でも起こってますよ。
他にもShellExecuteやGetOpenFileName・GetSaveFileNameなどでエラーが起こります。但し、例外&アクセス違反になるのはデバッグモードのときだけで、リリースコンパイルすれば問題なしです。
※そのため、プログラムのデバッグにちょっと苦労してます(^^;;


通報する
ページトップ
   
 記事の件名:
投稿記事Posted: 2005年5月30日(月) 21:38 
> 私の環境(Windows XP HOME SP2)でも起こってますよ。
そうなんですか...。僕もHOME Editonです。

> 他にもShellExecuteやGetOpenFileName・GetSaveFileNameなどでエラーが起こります。但し、例外&アクセス違反になるのはデバッグモードのときだけで、リリースコンパイルすれば問題なしです。
他にも起こるものがあるんですか。教えてくださりありがとうございます。

> ※そのため、プログラムのデバッグにちょっと苦労してます(^^;;
そうですね。いちいちその部分をコメントアウトしなければなりませんし...。何が問題なんだろう。


通報する
ページトップ
   
 記事の件名:
投稿記事Posted: 2005年5月30日(月) 21:38 
> > 私の環境(Windows XP HOME SP2)でも起こってますよ。
> そうなんですか...。僕もHOME Editonです。
> > 他にもShellExecuteやGetOpenFileName・GetSaveFileNameなどでエラーが起こります。但し、例外&アクセス違反になるのはデバッグモードのときだけで、リリースコンパイルすれば問題なしです。
> 他にも起こるものがあるんですか。教えてくださりありがとうございます。
> > ※そのため、プログラムのデバッグにちょっと苦労してます(^^;;
> そうですね。いちいちその部分をコメントアウトしなければなりませんし...。何が問題なんだろう。

久しぶり参上のノッチです。
yu0627さん、hiraさんと同じWindowsXP Home SP2ですが以下のソースで
問題なく終了します。
エラーがSHBrowseForFolderの部分で起こっていても他の部分が原因で
エラーになることもあるので、関係ないと思っている部分も含めて
どんどん削除して確認すると解決するかもしれません。
(以下のソースでもエラーが出るのであればお手上げですが)

Function GetFolderPath() As Long
Dim bi As BROWSEINFO
Dim pidl As Long
Dim buf[MAX_PATH] As byte

ZeroMemory(VarPtr(bi),Len(bi))
bi.hwndOwner=0
bi.lpszTitle="フォルダを選択してください"
bi.ulFlags=BIF_RETURNONLYFSDIRS

pidl=SHBrowseForFolder(bi)

If pidl Then
SHGetPathFromIDList(pidl,buf)
CoTaskMemFree(pidl)
GetFolderPath=1
MessageBox(0,buf,"選択したパス",0)
Else
GetFolderPath=0
End If
End Function

GetFolderPath()
End


通報する
ページトップ
   
 記事の件名:
投稿記事Posted: 2005年5月30日(月) 21:38 
> Function GetFolderPath() As Long
> Dim bi As BROWSEINFO
> Dim pidl As Long
> Dim buf[MAX_PATH] As byte
>
> ZeroMemory(VarPtr(bi),Len(bi))
> bi.hwndOwner=0
> bi.lpszTitle="フォルダを選択してください"
> bi.ulFlags=BIF_RETURNONLYFSDIRS
>
> pidl=SHBrowseForFolder(bi)
>
> If pidl Then
> SHGetPathFromIDList(pidl,buf)
> CoTaskMemFree(pidl)
> GetFolderPath=1
> MessageBox(0,buf,"選択したパス",0)
> Else
> GetFolderPath=0
> End If
> End Function
以上のソースを以下のようにした。
Function GetFolderPath() As Long
Dim bi As BROWSEINFO
Dim pidl As Long
Dim buf[MAX_PATH] As byte

ZeroMemory(VarPtr(bi),Len(bi))
bi.hwndOwner=0
bi.lpszTitle="フォルダを選択してください"
bi.ulFlags=BIF_RETURNONLYFSDIRS

pidl=SHBrowseForFolder(bi)

If pidl Then
SHGetPathFromIDList(pidl,buf)
CoTaskMemFree(pidl)
GetFolderPath=1
MessageBox(0,buf,"選択したパス",0)
Else
GetFolderPath=0
End If
End Function
これでも、「pidl=SHBrowseForFolder(bi)」の部分でまだアクセス違反が起こります...。(泣)


通報する
ページトップ
   
 記事の件名:
投稿記事Posted: 2005年5月30日(月) 21:39 
> これでも、「pidl=SHBrowseForFolder(bi)」の部分でまだアクセス違反が起こります...。(泣)

当方の環境でも

Dim bi As BROWSEINFO
Dim pidl As Long

ZeroMemory(VarPtr(bi),Len(bi))
bi.hwndOwner=0
bi.lpszTitle="フォルダを選択してください"
bi.ulFlags=BIF_RETURNONLYFSDIRS

pidl=SHBrowseForFolder(bi)
CoTaskMemFree(pidl)

これでもアクセス違反です。
コモンダイアログが絡むAPIは(多分)すべてアウトです。
実は、V3.11ぐらいより前はメッセージボックスの表示やコマンドボタンのクリックですら例外&アクセス違反が発生し、デバッグにはかなりの労力を費やしていました(^^;;
しかも同じ現象が起こる人が見つからなかったんですよね…。
現在はそれは直っていますが、「いつのまにか直っていた」って感じだったので、ひょっとしたらABのバグなのかもしれません。


通報する
ページトップ
   
 記事の件名:
投稿記事Posted: 2005年5月30日(月) 21:39 
そうですか...。
とりやえずこのままでいくしかないということですね。
このスレッドを管理人さんが見てくれることを願います。


通報する
ページトップ
   
 記事の件名:
投稿記事Posted: 2005年5月30日(月) 21:39 
SHBrowseForFolder
GetOpenFileName
ShellExecute
私もこれらのAPIを使ってますけど、デバッグ実行でも問題ないですよ。
yu0627さんのコードもどちらも動きます。

ただ、過去にShellExecuteの不具合に遭遇したことあります。
デバッグ実行時にShellExecuteを実行すると処理が戻らずにフリーズしました。
リリース実行では、動きましたが場合によっては、フリーズしました。
当時リリースコンパイルしたファイルを調べたら、
ソースコード:
ShellExecute(NULL, "explore", pszPath, 0, 0, SW_SHOWNORMAL)

実際の呼び出し:
ShellExecute(NULL, "explore", "explore", "explore", "explore", SW_SHOWNORMAL)
の様になっていたと記憶してます。
現在は、問題ないのと、エラーを再現できないので報告してませんが。
# 山本さんの環境で再現できないと面倒ですね。

WinXP Home (SP2)
AB4.01


通報する
ページトップ
   
 記事の件名:
投稿記事Posted: 2005年5月30日(月) 21:40 
> SHBrowseForFolder
> GetOpenFileName
> ShellExecute
> 私もこれらのAPIを使ってますけど、デバッグ実行でも問題ないですよ。

ComDlg系のAPIでエラーが出るのであればcomdlg32.dll等の
バージョンに違いがあるのでしょうか?
ちなみに僕の環境でcomdlg32.dllのバージョンは

6.00.2900.2180 (xpsp_sp2_rtm.040803-2158)

となっておりました。


通報する
ページトップ
   
 記事の件名:
投稿記事Posted: 2005年5月30日(月) 21:40 
僕もノッチさんと同じバージョンです。


通報する
ページトップ
   
 記事の件名:
投稿記事Posted: 2005年5月30日(月) 21:40 
私も同じです。
ちなみにShell32.dllのバージョンは6.0.2900.2620になっています。


通報する
ページトップ
   
 記事の件名:
投稿記事Posted: 2005年5月30日(月) 21:41 
> 私も同じです。
> ちなみにShell32.dllのバージョンは6.0.2900.2620になっています。
僕の場合は6.00.2900.2620 (xpsp_sp2_gdr.050225-1820)です。同じですね。


通報する
ページトップ
   
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 12 件の記事 ] 

全ての表示時間は UTC+09:00 です


オンラインデータ

このフォーラムを閲覧中のユーザー: Ahrefs [Bot], Bing [Bot], Semrush [Bot] & ゲスト[26人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by ocean