Seite 1 von 3

Fehler im BSp

Verfasst: Mi Mär 17, 2010 7:18 pm
von Empire
Tach ich hab gerade aus einem Buch ein Bsp abgeschrieben und hab jetzte ein Problem.
Das ist der Code

Code: Alles auswählen

#include <windows.h>
#include <StdIO.h>
#include <D3D9.h>

HWND hWnd;

int WINAPI WinMain(HINSTANCE hInstnance, HINSTANCE HPrevInstance, char* pcCmdLine, int iShowCmd)
{
    PDIRECT3D9 pD3D = Direct3DCreate9(D3D_SDK_VERSION);
    if(!pD3D)
    {
        MessageBox(hWnd,"Fehler 1", "Fehler", MB_OK | MB_ICONINFORMATION);
        return 1;
    }
    int iNumAdapters = pD3D->GetAdapterCount();
    D3DADAPTER_IDENTIFIER* pAdapters = new D3DADAPTER_IDENTIFIER9[iNumAdapters];
    
    for(int iAdapter = 0; iAdapter < iNumAdapter; iAdapter++)
    {
        if(FAILED(pD3D->GetAdapterIdentifier(iAdapter, 0, &Adadapters[iAdapter])))
        {
            MessageBox(hWnd,"Fehler 2", "Fehler", MB_OK | MB_ICONINFORMATION);
            pD3D->Release();
            delete[] pAdapters;
            return 1;
        }
        char acAdapterInfo[1024];
        sprintf(acAdapterInfo, "Adapter-ID: %d\nName: %s\nTreiber: %s\n TVersion: %d", iAdapter, pAdapters[iAdapter].Description ,pAdapters[iAdapter].Driver ,pAdapters[iAdapter].DriverVersion);
        MessageBox(hWnd,acAdapterInfo, "AInfo", MB_OK | MB_ICONINFORMATION);
    }
    pD3D->Release();
    delete[] pAdapters;
    
    return 0;
}
Und zwar wird D3DADAPTER_IDENTIFIER* nicht als Zeiger Typ anerkannt.
Kann mir jemand helfen?

mfg
Empire

Re: Fehler im BSp

Verfasst: Mi Mär 17, 2010 7:24 pm
von Xin
So leider nicht... Was meldet der Compiler und wo sind die bemängelten Zeilen?


Ich vermute hier:

Code: Alles auswählen

D3DADAPTER_IDENTIFIER* pAdapters = new D3DADAPTER_IDENTIFIER9[iNumAdapters]
Hier kommt ein D3DADAPTER_IDENTIFIER9* zurück.´, kein D3DADAPTER_IDENTIFIER*...

Re: Fehler im BSp

Verfasst: Mi Mär 17, 2010 8:52 pm
von Empire
Ok das war der Fehler
aber ich hab ein neuse Problem
jetzt sieht der Code so aus

Code: Alles auswählen

#include <windows.h>
#include <StdIO.h>
#include <D3D9.h>

HWND hWnd;

int WINAPI WinMain(HINSTANCE hInstnance, HINSTANCE HPrevInstance, char* pcCmdLine, int iShowCmd)
{
    PDIRECT3D9 pD3D = Direct3DCreate9(D3D_SDK_VERSION);
    if(!pD3D)
    {
        MessageBox(hWnd,"Fehler 1", "Fehler", MB_OK | MB_ICONINFORMATION);
        return 1;
    }
    int iNumAdapters = pD3D->GetAdapterCount();
    D3DADAPTER_IDENTIFIER9* pAdapters = new D3DADAPTER_IDENTIFIER9[iNumAdapters];
    
    for(int iAdapter = 0; iAdapter < iNumAdapters; iAdapter++)
    {
        if(FAILED(pD3D->GetAdapterIdentifier(iAdapter, 0, &pAdapters[iAdapter])))
        {
            MessageBox(hWnd,"Fehler 2", "Fehler", MB_OK | MB_ICONINFORMATION);
            pD3D->Release();
            delete[] pAdapters;
            return 1;
        }
        char acAdapterInfo[1024];
        sprintf(acAdapterInfo, "Adapter-ID: %d\nName: %s\nTreiber: %s\n TVersion: %d", iAdapter, pAdapters[iAdapter].Description ,pAdapters[iAdapter].Driver ,pAdapters[iAdapter].DriverVersion);
        MessageBox(hWnd,acAdapterInfo, "AInfo", MB_OK | MB_ICONINFORMATION);
    }
    pD3D->Release();
    delete[] pAdapters;
    
    return 0;
}
und diese Fehler kommen:
[Linker error] undefined reference to `Direct3DCreate9@4'
ld returned 1 exit status
C:\Dokumente und Einstellungen\Steffen\Desktop\Neuer Ordner (3)\Makefile.win [Build Error] [TEst.exe] Error 1

mfg
Empire

Re: Fehler im BSp

Verfasst: Mi Mär 17, 2010 8:56 pm
von Dirty Oerti
Hast du die entsprechende Bibliothek in den Linkereinstellungen eingetragen?

Re: Fehler im BSp

Verfasst: Do Mär 18, 2010 2:57 pm
von Empire
ja
sonst gäbs noch viel mehr fehler

Re: Fehler im BSp

Verfasst: Do Mär 18, 2010 3:10 pm
von Xin
Empire hat geschrieben:ja
sonst gäbs noch viel mehr fehler
Also explizit gefragt: Du hast die "D3D9.lib" in Deinen Linkereinstellungen drin?

Re: Fehler im BSp

Verfasst: Do Mär 18, 2010 7:11 pm
von Empire
Ich hab sie nur mit #include hinzugefügt
mehr müsste auch nicht nötig ist da sie im Ordner "includs" und nicht "lib" enthalten ist
(Selbst wenn ich wöllte könnte ich sie nicht über Projekt Optionen hinzufügen)

Re: Fehler im BSp

Verfasst: Do Mär 18, 2010 7:30 pm
von Xin
Empire hat geschrieben:Ich hab sie nur mit #include hinzugefügt
mehr müsste auch nicht nötig ist da sie im Ordner "includs" und nicht "lib" enthalten ist
(Selbst wenn ich wöllte könnte ich sie nicht über Projekt Optionen hinzufügen)
Doch... die Includes sind für den Compiler, die .lib musst Du dem Linker bekannt geben.

Re: Fehler im BSp

Verfasst: Fr Mär 19, 2010 1:57 pm
von Empire
Das sind aber .h Dateien

Re: Fehler im BSp

Verfasst: Fr Mär 19, 2010 2:06 pm
von Xin
Empire hat geschrieben:Das sind aber .h Dateien
Die Header-Dateien sind für den Compiler. Darin steht die Behauptung, dass es die Funktion 'Direct3DCreate9' gibt und er beim Ruf dieser Funktion nicht meckern soll.

Die .lib-Dateien befinden sich in einem anderen Ordner - üblicherweise in einem Ordner, der lib heißt und der mit dem SDK geliefert wird. Dort befinden sich die Funktionrümpfe, die Du aufrufst, wenn Du die Funktion Direct3DCreate9 aufrufst.
Du rufst nämlich nicht die Funktion in der DLL auf, sondern die Funktion, die in der .lib ist, die wiederum dafür sorgt, dass der Code in der DLL gerufen wird.

Der Linker hat nun den Auftrag Deinen 'Direct3DCreate9'-Ruf mit der entsprechenden Funktion zu verbinden. Wenn Du die .lib nicht bekannt gibst, weiß er nicht, womit er diesen Aufruf verlinken soll, also gibt es einen Linker-Fehler.

Also such die D3D9.lib im SDK und füge es den Pfad in die Abhängigkeiten des Linkers ein.