DirectDraw получить адрес процедуры, используя GetProcAddress - PullRequest
1 голос
/ 30 марта 2012

Как указано в документации для метода IDirectDraw7 :: SetCooperativeLevel , в нем говорится:

Вы должны использовать LoadLibrary, чтобы явно связать Ddraw.dll, а затем использовать GetProcAddress для доступаметод SetCooperativeLevel.

в комментариях.Однако, когда я пытаюсь это сделать (код ниже), он не работает.Я что-то не так делаю?

typedef HRESULT (*pSetCooperativeLevelFunc)(HWND, DWORD);
HMODULE ddrawLib = LoadLibrary(L"ddraw.dll");
pSetCooperativeLevelFunc SCL = (pSetCooperativeLevelFunc) GetProcAddress(
                                 ddrawLib,
                                 "SetCooperativeLevel"
                                 );

if (SCL == NULL) {
    // this happens
    int error = GetLastError(); // 127 (ERROR_PROC_NOT_FOUND)
    printf("Error getting SetCooperativeLevel function address: %i", error);
}

Ответы [ 3 ]

1 голос
/ 30 марта 2012

В ddraw.dll нет экспортированной функции SetCooperativeLevel.Используйте утилиту DUMPBIN и проверьте ее самостоятельно.Вы можете получить DirectDrawCreate / DirectDrawCreateEx и аналогичные функции, используя GetProcAddress, но вы не можете извлечь отдельные методы COM-объекта.

Статья довольно нелепа и не имеет смысла.Возможно, он должен был сказать вам, чтобы получить DirectDrawCreate из ddraw.dll или что-то в этом роде, но для этого нет особых причин.

Связь с ddraw.lib, вызов DirectDrawCreate и методы доступа, предоставляемые интерфейсом IDirectDraw7.

PS Если вы не знакомы с dumpbin, я бы предложил изучить хотя бы базовые возможностиэтой утилиты.

1 голос
/ 30 марта 2012

Я думаю, что это ошибка документации. Прошло много времени с тех пор, как я использовал DirectDraw7, но я не помню, чтобы загружать его динамически. Это был просто метод интерфейса IDirectDraw7, который вызывался, как и любой другой метод.

0 голосов
/ 15 марта 2015

Начиная с DX9, ddraw.lib был полностью удален из SDK, поэтому вам нужно вызвать LoadLibrary / GetProcAddress для вызова DirectDrawCreate или DirectDrawEnumerate. К сожалению, MSDN ошибся и добавил замечание GetProcAddress в КАЖДУЮ функцию DirectDraw, даже методы COM-интерфейсов.

...