2009-05-06 4 views
6

Ich versuche, einen Bildschirmschoner mit Visual C++ 2008 Express Edition SP1 unter Windows XP zu kompilieren. Ich bekomme einen Laufzeitfehler: "Der Prozedur-Einstiegspunkt ChangeWindowMessageFilter() konnte nicht in der Dynamic Link Library USER32.dll gefunden werden." Soweit ich das beurteilen kann, ist dies darauf zurückzuführen, dass Microsoft die in VS 2008 enthaltene scrnsave.lib-Bibliothek verpfuscht hat, um eine Vista-spezifische Funktion aufzurufen, die unter XP fehlschlägt, weil die Funktion nicht existiert.Einen Bildschirmschoner für XP mit VC++ 2008 erstellen

Definieren WINVER scheint nichts zu tun.

Wie kann ich das umgehen?

+0

@james_block: Behalten Sie diese Frage im Auge ... das hilft Ihnen ... http://stackoverflow.com/questions/2300817/using-multiple-versions-of-the-windows-platform -sdk-with-vs-2008-professional – t0mm13b

Antwort

0

Sie können versuchen, eine ältere Version des Platform SDK zu erhalten und eine Verknüpfung zu seiner Version von scrnsave.lib herzustellen.

http://www.microsoft.com/downloads/details.aspx?FamilyId=A55B6B43-E24F-4EA3-A93E-40C0EC4F68E5&displaylang=en ist der Download-Link für das Windows Server 2003 SP1 Platform SDK.

+0

Ich hatte gehofft zu vermeiden, herunterzuladen und installieren Sie eine ganze alte SDK nur für eine Datei, aber wenn jemand kann eine bessere Option zu finden, ich muss dies tun. –

1

Wenn Sie dies in MSDN für 'ChangeWindowMessageFilter' anzeigen, bedeutet dies, dass es Vista-spezifisch ist und Teil der User32.lib ist, mit der Sie verlinken, da Windows XP diese Funktion in der User32.dll nicht enthält. ... daher der Blowup ... empfohlen, Michaels Vorschlag zu folgen, eine ältere Version des SDK herunterzuladen ... es gibt keinen anderen Weg, es zu tun ... Ich frage mich, ob Sie ein anderes SDK Seite an Seite installieren können, eines für Vista-Plattformen und die andere für Win XP-Plattform?

Edit: fand ich einen interessanten Link hier darüber hier auf einem blog ... Er spricht über das genaue gleiche Problem, eine alte Kopie von ScrnSave.lib von einer älteren Installation (VS 2005 greifen, wenn Sie Zugang haben einem oder einen Freund/Kollegen fragen) der obigen Funktion Sprechen, die vista spezifisch ist - hier ist eine interessante opinion darauf, warum es nicht ...

Hoffnung berührt werden sollten, das hilft, Mit freundlichen Grüßen, Tom.

+0

Fühlen Sie sich frei um hier für jemanden zu fragen, der eine Kopie haben könnte ... – t0mm13b

0

schreiben Stub-Funktion (viele Details aus dem Code links)

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

    return TRUE; 
} 

Wenn die obj oder lib, dass diese Funktion in vor user32.lib in Ihrer Verbindungslinie ist, dann sollte der Linker wählen Sie Ihre Stub-Funktion und nicht die von user32.lib.

Ihre Stub-Funktion kann zur Laufzeit feststellen, dass Sie auf Vista oder später sind und rufen Sie die echte Funktion auf, ansonsten lügen Sie und geben Sie TRUE zurück.