Fehler bei Direct3D (LNK2019)
-
Hallo Leute,
ich habe mir heute ein neues leeres Projekt erstellt und ein Tutorial zu Direct3D begonnen. Da bekomm ich diese Fehlermeldung:
error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_D3D11CreateDeviceAndSwapChain@48" in Funktion ""void __cdecl InitD3D(struct HWND__ *)" (?InitD3D@@YAXPAUHWND__@@@Z)".
fatal error LNK1120: 1 nicht aufgelöste externe Verweise.Sonst kommen keine Fehler im Compiler.
Woran kann das liegen?
Ich habe die DirectX SDK June 2010 installiert.#include <Windows.h> #include <WindowsX.h> #include <d3d11.h> #include <d3dx10.h> #include <d3dx11.h> #pragma comment (lib, "d3d11.lib") #pragma comment (lib, "d3dx10.lib") #pragma comment (lib, "d3dx11.lib") // Globals IDXGISwapChain *swapchain; ID3D11Device *dev; ID3D11DeviceContext *devcon; // Prototypes LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); void InitD3D(HWND hWnd); void CleanD3D(); // Main int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int iCmdShow) { HWND hWnd; WNDCLASSEX WndClassEx; ZeroMemory(&WndClassEx, sizeof(WNDCLASSEX)); WndClassEx.cbSize = sizeof(WNDCLASSEX); WndClassEx.style = CS_HREDRAW | CS_VREDRAW; WndClassEx.lpfnWndProc = WindowProc; WndClassEx.hInstance = hInstance; WndClassEx.hCursor = LoadCursor(NULL, IDC_ARROW); WndClassEx.hbrBackground = (HBRUSH)COLOR_WINDOW; WndClassEx.lpszClassName = "WindowClass"; RegisterClassEx(&WndClassEx); RECT wr = {0, 0, 1280, 720}; AdjustWindowRect(&wr, WS_OVERLAPPEDWINDOW, FALSE); hWnd = CreateWindowEx(NULL, "WindowClass", "Hallo", WS_OVERLAPPEDWINDOW, 300, 175, wr.right - wr.left, wr.bottom - wr.top, NULL, NULL, hInstance, NULL); ShowWindow(hWnd, iCmdShow); MSG msg = {0}; while (TRUE) { if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); if (msg.message == WM_QUIT) { break; } } } return msg.wParam; } LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_DESTROY: { PostQuitMessage(0); return 0; } } return DefWindowProc(hWnd, message, wParam, lParam); } // Methods void InitD3D(HWND hWnd) { DXGI_SWAP_CHAIN_DESC scd; ZeroMemory(&scd, sizeof(DXGI_SWAP_CHAIN_DESC)); scd.BufferCount = 1; scd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; scd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; scd.OutputWindow = hWnd; scd.SampleDesc.Count = 4; scd.Windowed = TRUE; D3D11CreateDeviceAndSwapChain(NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, NULL, NULL, NULL, D3D11_SDK_VERSION, &scd, &swapchain, &dev, NULL, &devcon); } void CleanD3D() { swapchain -> Release(); dev -> Release(); devcon -> Release(); }
Hat jemand eine Idee?
-
Link mal gegen die 32bit Libraries und nicht die x64.
-
Wie geht das?
Ich seh da keine 32 oder 64.
-
SChau in deinen Projekteinstellungen oder in deinen Verzeichnissen nach.
Unter C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Lib gibt es einen x64 und einen x86 Ordner. Der x86 Ordner sollte im Pfad eingetragen sein wenn du einen 32bit Compiler verwendest.
-
Kann ich nicht einfach einen 64bit Compiler verwenden?
-
Wenn ich die 32bit Libs verwende kann der Compiler die d3dx10.lib und die d3dx11.lib nicht öffnen.
-
OK, es geht jetzt.
Ich hatte x32, statt x86 eingegeben
-
Vyax schrieb:
Kann ich nicht einfach einen 64bit Compiler verwenden?
Sicher, wenn du einen hast...