D3D9 Too many arguments to function, dynamiczne ładowanie bibliotek DLL

0

Napisałem taki kod przy kompilacji Kompilator zgłasza błąd w 20 linii [Error] too many arguments to function jak temu zaradzić żeby program zadziałał?

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

HMODULE D3D9_lib;
FARPROC _Direct3DCreate9;

int __cdecl D3D9() {
	D3D9_lib = LoadLibrary("D3D9.dll");
	_Direct3DCreate9 = GetProcAddress(D3D9_lib, "Direct3DCreate9");
	return 0;
}

int main()
{
    int D3D9_load = D3D9();
    if (!D3D9) return 1;

    IDirect3D9* pD3D9 = NULL;
    pD3D9 = (IDirect3D9*)_Direct3DCreate9(D3D_SDK_VERSION);

    (void)FreeLibrary(D3D9_lib);
}

user image

1

Zadeklarowałeś że ma być bez parametrów: FARPROC _Direct3DCreate9; a później przekazujesz parametr, nie rozumiem czemu się dziwisz?

0

A jak można do niego przekazać parametr? Nie wiedziałem o tym że trzeba tak robić :/

1

Po co się bawisz w dynamiczne linkowanie? Nie możesz po prostu, normalnie, Direct3DCreate9?

Ale jeśli już koniecznie chcesz, oto odpowiedni wycinek z mojego niedawnego programu, który testuje wszystkie wersje D3D jakie istnieją:

void go_d3d9()
{
//    struct IDirect3D9:public IUnknown {};
    IDirect3D9* (WINAPI *Direct3DCreate9)(UINT SDKVersion);

    HMODULE d3d9dll = LoadLibrary(L"d3d9.dll");
    cout << "ptr " << d3d9dll << endl;

    if (!d3d9dll)
        return;

    *(void**)&Direct3DCreate9 = GetProcAddress(d3d9dll, "Direct3DCreate9");
    cout << "ptr " << Direct3DCreate9 << endl;

    if (!Direct3DCreate9)
        return;

    IDirect3D9 *d3d9 = Direct3DCreate9(D3D9_SDK_VERSION);

    cout << "ptr " << d3d9 << endl;

    if (d3d9)
        d3d9->Release();

    FreeLibrary(d3d9dll);
}
1
    typedef IDirect3D9* WINAPI Direct3DCreate9proc(UINT SDKVersion);
...
    Direct3DCreate9proc *Direct3DCreate9=(Direct3DCreate9proc*)GetProcAddress(d3d9dll, "Direct3DCreate9");
0

Wolę używać biblioteki dynamicznie bo np. jeśli jej nie będzie bibliotek DirectX9 w systemie to program się nie będzie crashował.

Dziękuje za pomoc kod udało mi się skompilować :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1