2009-05-06 17 views
6

Windows XPでVisual C++ 2008 Express Edition SP1を使用してスクリーンセーバーをコンパイルしようとしています。実行時エラーが発生しました: "プロシージャエントリポイントChangeWindowMessageFilter()をダイナミックリンクライブラリUSER32.dllに配置できませんでした。私が知る限り、これはMicrosoftがVS 2008に含まれているscrnsave.libライブラリを使ってVista特有の関数を呼び出すことができなかったためです。これは関数が存在しないためにXPで失敗します。VC++ 2008を使用してXP用スクリーンセーバーを構築する

WINVERの定義は何もしていないようです。

どうすれば対処できますか?

+0

@james_block:この質問に注目してください...あなたに役立つでしょう... http://stackoverflow.com/questions/2300817/using-multiple-versions-of-the-windows-platform -sdk-with-vs-2008-professional – t0mm13b

答えて

0

古いバージョンのPlatform SDKを入手して、そのバージョンのscrnsave.libにリンクすることができます。

http://www.microsoft.com/downloads/details.aspx?FamilyId=A55B6B43-E24F-4EA3-A93E-40C0EC4F68E5&displaylang=enは、Windows Server 2003 SP1プラットフォームSDKのダウンロードリンクです。

+0

古いSDK全体を1つのファイルとしてダウンロードしてインストールすることを避けたいと考えていましたが、誰かがより良いオプションを考え出すことができない限り、これを行う必要があります。 –

1

これをMSDNの 'ChangeWindowMessageFilter'に表示すると、Vista固有で、User32.libの一部であることが示されます。これは、Windows XPにUser32.dllの機能がないため、リンクしているものです。 ...それゆえ、ブローアップ...マイケルの提案に従って、古いバージョンのSDKをダウンロードすることをお勧めします...それ以外の方法はありません...別のSDKを横に並べてインストールすることができますか? VistaのプラットフォームとWin XPプラットフォームのための他の?

編集:私は、それが正確な同じ問題を語る... blogにここにこのことについて、ここで興味深いのリンクを見つけ、あなたがアクセス権を持っている場合は、古いインストール(VS 2005からscrnsave.libの古いコピーをつかみます1または友人/同僚に尋ねる)ビスタ固有である上記の機能といえば? - それは触れるべきでない理由をここに興味深いopinionだ...

希望これは、 よろしく、 トムのに役立ちます。

+0

コピーを持っている可能性がある人のためにここでお気軽にお問い合わせください... – t0mm13b

0

この関数がであることをOBJやlibには、リンク行でuser32.libの前にある場合は、リンカはあなたを選ぶ必要があります

BOOL WINAPI ChangeWindowMessageFilter(  
    UINT message, 
    DWORD dwFlag) 
{ 
    if (running_on_vista_or_later) 
    { 
     .... 
     pfn = GetProcAddress(... "ChangeWindowMessageFilter"); 
     return pfn (message, dwFlag); 
    } 

    return TRUE; 
} 

(多くの詳細は、コードのうち、左)スタブ関数を書きますuser32.libからのものではなく、スタブ関数です。

あなたのスタブ関数は、あなたがVistaまたはそれ以降であることを実行時に検出して、実際の関数を呼び出すことができます。そうでなければ、うそをつけてTRUEを返します。

関連する問題