2011-12-30 10 views
0

C++ Builder XEで開発されたWin32アプリケーションは、過去数年間、WinPE 2.x/3.0環境で優れています。私は過去数ヶ月間にいくつかの重要な変更を加えましたが、これで完了し、WinPEで実行しようとしました。エラーメッセージが表示されます:あなたのコンピュータにSHFOLDER.DLLが存在しないため、プログラムを開始できません。静的リンクSHFolderコンポーネント

私はWinPE環境を制御できません。このDLLはWinPEには含まれていませんので、最初に必要なコンポーネントを静的にリンクしようとしています。しかし、このDLLによって提供される機能は、DLLからしか利用できないようです。

私はこのDLLに関する有用な情報を見つけることができませんでした。残念なことに、今までこのDLLが必要な機能を追加しました。私は誰かがこれを経験していて、必要なコンポーネントを静的にリンクしたり、回避策を見つけ出してこのアプリケーションがもはやdllを必要としないように助けてくれることを期待しています。ありがとう!

+0

コードまたはC++ビルダーのランタイムサポートライブラリでSHGetFolderPath()の呼び出しを探します。廃止された関数であり、shfolder.dllからshell32.dllに移動されました。またはexeと一緒にshfolder.dllをデプロイするだけです。 –

答えて

1

shfolder.dll デスクトップ、マイドキュメント、Windowsディレクトリ、のようなシェルフォルダのパスを取得するために使用されるなどこれは、実装SHGetFolderPath()一貫等によりSHGetSpecialFolderPath()間の実装の違い、SHGetFolderLocation()SHGetKnownFolderPath()

までのWindowsのすべてのバージョンに沿って

MSDNは、より良い、それを説明する:

この関数は、シェルの 以前のバージョンに含まれ、SHGetSpecialFolderPathのスーパーセットです。 にShell32.dllバージョン5.0(Windows Millerium Edition(Windows Me)およびWindows 2000)が含まれているシステムでは、SHGetFolderPathは SHFolder.dll(Microsoft Internet Explorer 4.0および 以降のバージョンで配布されています)によって取得されました。 SHFolder.dllは、常に現在のプラットフォームの バージョンのこの関数を呼び出します。それが失敗すると、 の適切な動作をシミュレートしようとします。 の下位互換性のためにSHFolder.dllが引き続き含まれていますが、この機能は Shell32.dllに実装されています。

DLL自体はredistributableです。したがって、WinPEに含めることができます。彼らはあなたのために働く場合、あなたは特別なケースのいずれかを必要としない場合は、他の機能のいずれかを使用することもできます。

+0

私はShGetFolderPathが別のdllにあるラッパーであることを認識しませんでした。私はWinPEを配布していないので、dllは実際にはオプションではありません。迅速かつ簡単な修正は単に代わりにSHGetSpecialFolderPath()を使用することでした。早速のご返事ありがとうございます! – Jimmyb

関連する問題