Работа с динамической библиотекой d3dx9d_33 в С++

Не могу понять как правильно работать с библиотекой d3dx9d_33.dll. Я не хочу подключать *.lib файлы, а напрямую получать адрес функций и запускать ее, передавая все нужные аргументы. Но в интернете нигде нет примера, где я мог бы понять хотя бы простейшую инициализацию окна. По крайне мере я не смог найти. Во многих больших проектах эти библиотеки находятся в корневой папке игры и их игровые движки прямо их использует. Я бы хотел так же, если вы меня правильно поняли. Желательно, если кто знает, может будет ссылка на книгу, где автор делает акцент на использование DirectX 9 для динамического программирования. Или ссылка на сайт, спасибо за любую помощь!!!


Ответы (1 шт):

Автор решения: nick_n_a

Если вы не хотите полключать lib, то есть вариант динамического связывания.

HRESULT InitDx9(HWND wnd)      {
    HRESULT __stdcall (*DirectDrawCreate2) (GUID         *lpGUID, IDX_DirectDraw** , void**) = 0;
    IDX_IDirect3D9 * d3d = 0;
    HRESULT rs= 0;
    IDX_IDirect3D9* __stdcall (*Direct3DCreate9)(UINT SDKVersion) = 0;
    int ver = 32;
    HMODULE d3 = LoadLibrary("D3d9.dll");           
    if (d3!=0) {                    
        *reinterpret_cast<FARPROC*> ( &Direct3DCreate9) =   GetProcAddress(d3,"Direct3DCreate9");           
        d3d = Direct3DCreate9(ver);
       ///....  и так далее
     }

LoadLibrary + GetProcAddress. C GetProcAddress в зависимости от версии с++ приходится повоевать что бы получить адрес именно функции с нужными параметрами. Не помню работает ли такой вариант с VisualStudio, в крайнем случае, хоть это и не красиво - можно преобразовать адрес через union. Получив "интерфейс" дальше уже попроще.

Аналогичным образом можно подключать DirectDraw. Если проблемы с CLSID то самый простой выход такой:

GUID g;     
hr=CLSIDFromString(L"{54ec77fa-1377-44e6-8c32-88fd5f44c84c}",&g);       

но не запрещено делать и другие более сложные формы записи

→ Ссылка