ссылка на неразрешенный внешний символ (directx)

Тема в разделе "Разработка игр и приложений к ним", создана пользователем nyawkooo, 2 фев 2011.

  1. nyawkooo

    nyawkooo Гость

    Всем привет. MVS 2008 Pro Edition (rus), при компиляции кода, выдает ошибку: error LNK2019: ссылка на неразрешенный внешний символ _Direct3DCreate9@4 в функции _WinMain@16. Подскажите, пожалуйста, что нетак :(

    Код (C++):
    #include <windows.h>
    #include <d3d9.h>

    LRESULT __stdcall WndProc(HWND, UINT, WPARAM, LPARAM);

    int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    LPSTR lpCmdLine, int nCmdShow)
    {
    WNDCLASS wc;
    wc.style = CS_OWNDC;
    wc.lpfnWndProc = WndProc;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hbrBackground = (HBRUSH)(6);
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wc.hInstance = hInstance;
    wc.lpszClassName = L"class";
    wc.lpszMenuName = NULL;

    RegisterClass(&wc);

    HWND hWnd = CreateWindow(L"class",L"Инициализация Direct3D",
    WS_OVERLAPPEDWINDOW,200,100,
    500,500,NULL,NULL,hInstance,NULL);

    ShowWindow(hWnd,nCmdShow);
    UpdateWindow(hWnd);

    IDirect3D9* d3d = NULL;  
    IDirect3DDevice9* dev = NULL;

    d3d = Direct3DCreate9(D3D_SDK_VERSION);

    D3DPRESENT_PARAMETERS pp;
    ZeroMemory(&pp,sizeof(pp));

    pp.BackBufferWidth = 500;
    pp.BackBufferHeight = 500;
    pp.BackBufferFormat = D3DFMT_X8R8G8B8;
    pp.BackBufferCount = 1;
    pp.SwapEffect = D3DSWAPEFFECT_DISCARD;
    pp.hDeviceWindow = hWnd;
    pp.Windowed = true;

    d3d->CreateDevice(D3DADAPTER_DEFAULT,
    D3DDEVTYPE_REF,hWnd,
    D3DCREATE_SOFTWARE_VERTEXPROCESSING,
    &pp, &dev);
    MSG msg;
    while (1)
    {
    if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
    {
    if (msg.message == WM_QUIT)
    break;
    TranslateMessage(&msg);
    DispatchMessage(&msg);
    }

    dev->Clear(0,NULL,D3DCLEAR_TARGET,
    D3DCOLOR_XRGB(255,255,255),1.0f,0);

    dev->BeginScene();
    dev->EndScene();

    dev->Present(NULL,NULL,NULL,NULL);
    }

    if (dev != NULL)
    dev->Release();
    if (d3d != NULL)
    d3d->Release();
    return 0;
    }

    LRESULT __stdcall WndProc (HWND hWnd, UINT msg,
    WPARAM wParam, LPARAM lParam)
    {
    switch (msg)
    {
    case WM_DESTROY:
    PostQuitMessage(0);
    return 0;
    }
    return DefWindowProc(hWnd,msg,wParam,lParam);
    }
     
  2. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    У тебя DirectX SDK установлен?
     
  3. nyawkooo

    nyawkooo Гость

    DirectX SDK установлен (June 2010), инклуды и либы подключил.
     
  4. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    В коде вроде все верно.. Скинь сообщения об ошибках полностью, все что пишет компилятор.
     
  5. nyawkooo

    nyawkooo Гость

    Ошибка 1: error LNK2019: ссылка на неразрешенный внешний символ _Direct3DCreate9@4 в функции _WinMain@16 ; файл: main.obj
    Ошибка 2: fatal error LNK1120: 1 неразрешенных внешних элементов
     
  6. nyawkooo

    nyawkooo Гость

    Попробовал скачать с офф сайта MVS 2008 Express, выдает ту же ошибку :facepalm: :
    1>main.obj : error LNK2019: unresolved external symbol _Direct3DCreate9@4 referenced in function _WinMain@16
    1>D:\Data\dx\test\Debug\test.exe : fatal error LNK1120: 1 unresolved externals

    Надеюсь это чем-нибудь поможет:
    Попробовал в Character Set поставить Multi-Byte Character Set, теперь выдает:

    1>d:\data\dx\test\test\main.cpp(19) : error C2440: '=' : cannot convert from 'const wchar_t [6]' to 'LPCSTR'; в этой строчке в кода: wc.lpszClassName = L"class";

    1>d:\data\dx\test\test\main.cpp(26) : error C2664: 'CreateWindowExA' : cannot convert parameter 2 from 'const wchar_t [6]' to 'LPCSTR' ; в этой строчке кода: 500,500,NULL,NULL,hInstance,NULL);
     
  7. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Не поможет. Поменяй обратно.

    Библиотеку не находит. Проверяй. У тебя d3d9.lib не подключается (90%).

    Добавлено: Попробуй в самое начало кода (перед #include <windows.h>) поставить #pragma comment(lib, "d3d9.lib")
     
  8. nyawkooo

    nyawkooo Гость

    lazybiz , Спасибо большое, помогло ^_^
     
Загрузка...

Поделиться этой страницей