ab.com コミュニティ https://www.activebasic.com/forum/ |
|
SHBrowseForFolderとDirectXの機能について https://www.activebasic.com/forum/viewtopic.php?t=20 |
ページ 1 / 1 |
作成者: | yu0627 [ 2005年5月30日(月) 21:35 ] |
記事の件名: | SHBrowseForFolderとDirectXの機能について |
こんばんは。 早速質問ですが、以下のソースをデバッグするとエラーが起こります。 コード: 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でもこういうことが可能でしょうか? 二つともお答えお願いいたします。 |
作成者: | hira [ 2005年5月30日(月) 21:37 ] |
記事の件名: | |
> これをデバッグで実行すると例外処理が出ます。デバッグで突き止めていくと「pidl=SHBrowseForFolder(bi)」の部分でアクセス違反が起こっているようです。 > 何度も投稿していますが解決しないのでまた投稿します。 私の環境(Windows XP HOME SP2)でも起こってますよ。 他にもShellExecuteやGetOpenFileName・GetSaveFileNameなどでエラーが起こります。但し、例外&アクセス違反になるのはデバッグモードのときだけで、リリースコンパイルすれば問題なしです。 ※そのため、プログラムのデバッグにちょっと苦労してます(^^;; |
作成者: | yu0627 [ 2005年5月30日(月) 21:38 ] |
記事の件名: | |
> 私の環境(Windows XP HOME SP2)でも起こってますよ。 そうなんですか...。僕もHOME Editonです。 > 他にもShellExecuteやGetOpenFileName・GetSaveFileNameなどでエラーが起こります。但し、例外&アクセス違反になるのはデバッグモードのときだけで、リリースコンパイルすれば問題なしです。 他にも起こるものがあるんですか。教えてくださりありがとうございます。 > ※そのため、プログラムのデバッグにちょっと苦労してます(^^;; そうですね。いちいちその部分をコメントアウトしなければなりませんし...。何が問題なんだろう。 |
作成者: | ノッチ [ 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 |
作成者: | yu0627 [ 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)」の部分でまだアクセス違反が起こります...。(泣) |
作成者: | hira [ 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のバグなのかもしれません。 |
作成者: | yu0627 [ 2005年5月30日(月) 21:39 ] |
記事の件名: | |
そうですか...。 とりやえずこのままでいくしかないということですね。 このスレッドを管理人さんが見てくれることを願います。 |
作成者: | abs [ 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 |
作成者: | ノッチ [ 2005年5月30日(月) 21:40 ] |
記事の件名: | |
> SHBrowseForFolder > GetOpenFileName > ShellExecute > 私もこれらのAPIを使ってますけど、デバッグ実行でも問題ないですよ。 ComDlg系のAPIでエラーが出るのであればcomdlg32.dll等の バージョンに違いがあるのでしょうか? ちなみに僕の環境でcomdlg32.dllのバージョンは 6.00.2900.2180 (xpsp_sp2_rtm.040803-2158) となっておりました。 |
作成者: | yu0627 [ 2005年5月30日(月) 21:40 ] |
記事の件名: | |
僕もノッチさんと同じバージョンです。 |
作成者: | hira [ 2005年5月30日(月) 21:40 ] |
記事の件名: | |
私も同じです。 ちなみにShell32.dllのバージョンは6.0.2900.2620になっています。 |
作成者: | yu0627 [ 2005年5月30日(月) 21:41 ] |
記事の件名: | |
> 私も同じです。 > ちなみにShell32.dllのバージョンは6.0.2900.2620になっています。 僕の場合は6.00.2900.2620 (xpsp_sp2_gdr.050225-1820)です。同じですね。 |
ページ 1 / 1 | 全ての表示時間は UTC+09:00 です |
Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |