2008-06-05

フォルダ選択ダイアログが使えなかった

自作ツールの WhereNowでデータファイルの位置を選択できるようにしようとしていました。
 
軽く検索してみたところ、フォルダ選択の場合はSHBrowseForFolder()を使うようですね。
 
SDKのヘッダファイルを検索してみると shlobj.hにSHBrowseForFolder()があったので 早速試してみたのですが、リンク時にエラーが出てしまいました。
1>WhereNow.obj : error LNK2019: 未解決の外部シンボル SHBrowseForFolder が関数 "long __cdecl CustomItemOptionsDlgProc(struct HWND__ *,unsigned int,unsigned int,long)" (?CustomItemOptionsDlgProc@@YAJPAUHWND__@@IIJ@Z) で参照されました。
1>Windows Mobile 6 Professional SDK (ARMV4I)\Release/WhereNow.dll : fatal error LNK1120: 外部参照 1 が未解決です。
 
一応、ヘルプを見て ceshell.libはリンクしています。
#include 
#pragma comment(lib, "ceshell.lib")
 
しばらく悩んでいたのですが、もう一度ヘルプをよーく見てみると、Windows Mobileの欄に赤背景で「-」の文字がありました。
どうやら Windows Mobileでは SHBrowseForFolder()は使えないようです。
 
ヘルプをよく読めと言われればそれまでですが、無いならヘッダファイルに含めないで欲しいですよね。
 

2 件のコメント:

通りすがり さんのコメント...

昨日の通りすがりです。
早速の検討ありがとうございます。

ところで、ダイアログで選択できれば確かにベストですが、APIがサポートされて無いのでダイアログを自作することになってしまいます。
.NETCFなら割と簡単なんですけどね。
さし当たって簡易的な方法として、単純なインプットボックスで、フルパスを入力してもらう手でもかなりいいんじゃないかと思います。
レジストリエディタを使うよりはマシですし、gsfinder系のファイラーなどで、パス名をコピーすることもできますし。
ダイアログで選択できるようにするのは、まあ暇な時にやるとかで(笑)

kazuaki さんのコメント...

こんばんは。
コメントありがとうございます。

パス入力の設定画面は作ってみたのですが、+αの小細工をしようとして投げ出してしまいました(笑

やはり何事もシンプルにした方がいいですね。
という訳で もうしばらくお待ちください。