Работа с динамической библиотекой d3dx9d_33 в С++
Не могу понять как правильно работать с библиотекой d3dx9d_33.dll. Я не хочу подключать *.lib файлы, а напрямую получать адрес функций и запускать ее, передавая все нужные аргументы. Но в интернете нигде нет примера, где я мог бы понять хотя бы простейшую инициализацию окна. По крайне мере я не смог найти. Во многих больших проектах эти библиотеки находятся в корневой папке игры и их игровые движки прямо их использует. Я бы хотел так же, если вы меня правильно поняли. Желательно, если кто знает, может будет ссылка на книгу, где автор делает акцент на использование DirectX 9 для динамического программирования. Или ссылка на сайт, спасибо за любую помощь!!!
Ответы (1 шт):
Если вы не хотите полключать 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);
но не запрещено делать и другие более сложные формы записи