2012-03-29 14 views
1

Was die IDirectDraw7::SetCooperativeLevel method in der Dokumentation angegeben, heißt esDirectDraw- get Prozedur-Adresse GetProcAddress

Sie müssen Loadlibrary explizit auf Ddraw.dll verlinken auf und dann GetProcAddress verwenden, um die SetCooperativeLevel Methode zuzugreifen.

in den Ausführungen. Wenn ich jedoch versuche (Code unten), funktioniert es nicht. Mache ich etwas falsch?

typedef HRESULT (*pSetCooperativeLevelFunc)(HWND, DWORD); 
HMODULE ddrawLib = LoadLibrary(L"ddraw.dll"); 
pSetCooperativeLevelFunc SCL = (pSetCooperativeLevelFunc) GetProcAddress(
           ddrawLib, 
           "SetCooperativeLevel" 
           ); 

if (SCL == NULL) { 
    // this happens 
    int error = GetLastError(); // 127 (ERROR_PROC_NOT_FOUND) 
    printf("Error getting SetCooperativeLevel function address: %i", error); 
} 

Antwort

1

Es gibt keine exportierte SetCooperativeLevel Funktion in ddraw.dll. Verwenden Sie DUMPBIN Dienstprogramm und überprüfen Sie es selbst. Sie können DirectDrawCreate/DirectDrawCreateEx und ähnliche Funktionen erhalten GetProcAddress verwenden, aber Sie können nicht einzelne Methoden der COM-Objekt extrahieren.

Artikel ist ziemlich lächerlich und macht keinen Sinn. Vielleicht sollte es dir sagen, dass du DirectDrawCreate von ddraw.dll oder so ähnlich bekommst, aber es gibt wenig Grund, das zu tun.

Verbindung mit ddraw.lib, Anruf DirectDrawCreate und Zugriffsmethoden von IDirectDraw7-Schnittstelle zur Verfügung gestellt.

P.S. Wenn Sie mit dumpbin nicht vertraut sind, würde ich vorschlagen, zumindest die grundlegende Verwendung dieses Dienstprogramms zu erlernen.

+0

Ich möchte die Leute treffen, die einige dieser MSDN-Artikel schreiben. Sie haben Pech mit der Tatsache, dass es unten keine Kommentare gibt, die die Situation erklären. – chris

+0

Das dachte ich auch, ich werde versuchen zu lernen, wie man 'DUMPBIN' verwendet, danke. – cplusplus

+0

@chris: "Leute, die einige dieser MSDN-Artikel schreiben." Es ist eigentlich ziemlich seltsam. Ich habe den Eindruck, dass vor etwa 5,7 Jahren Dokumentation von MSDN sehr gut war, aber dann "etwas" passiert ist, und die Dinge begannen sich schnell zu verschlechtern. Jetzt ist das Ganze ein Durcheinander, das schwer zu navigieren ist und Google-Suche erfordert, um ordentliche Ergebnisse zu erzielen, was sehr schade ist. – SigTerm

1

Ich denke, das ist ein Dokumentationsfehler. Es ist lange her, dass ich DirectDraw7 benutzt habe, aber ich erinnere mich nicht, dass ich es dynamisch laden musste. Es war nur eine Methode der IDirectDraw7-Schnittstelle und wurde wie jede andere Methode aufgerufen.

0

Seit DX9 wurde ddraw.lib vollständig aus dem SDK entfernt. Daher müssen Sie LoadLibrary/GetProcAddress aufrufen, um DirectDrawCreate oder DirectDrawEnumerate aufzurufen. Leider hat MSDN es falsch verstanden und die Bemerkung GetProcAddress zu jeder DirectDraw-Funktion hinzugefügt, sogar die Methoden der COM-Schnittstellen.