XP版のcomdlg32.dllの転用に関する互換性
拡張カーネル v3.1j で、XP版の comdlg32.dll を転用してみたのですが、プリンタのダイアログが表示されない以外にファイルダイアログのリストボタンが表示されない等互換性の問題が出てるのでまとめてみました。
1. SHMapIDListToImageListIndexAsync を呼び出しているので SHMapPIDLToSystemImageListIndex を使った処理にしなくてはいけないが、 XPは SHMapIDListToImageListIndexAsync で処理するときに紐づける ToolBoxのハンドルを紐づけているので処理を実装する必要がある。
2. XP版の shell32.dll の SHGetDesktopFolder 処理を呼び出すと、XP版の comdlg32.dll のToolBoxを動作させることはできるが、XPと2000で、アイコンリストの表示オプションに違いがあるので正常に動作しない(大きいアイコン・小さいアイコンメニューがない)
3. SHGetDesktopFolder で IShellFolder インターフェイスを呼び出すと、呼び出された shell32.dll のアドレスになるだけでなく、ダイアログなどのリソースも shell32.dll から持ってくる。
なので、SHMapIDListToImageListIndexAsync を実装するのが解だと思うのだけど ・ω・ うーむ
maybe there are also registry changes that should be affected