1

如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);
}
4

3 回答 3

1

我认为这是一个文档错误。自从我使用 DirectDraw7 以来已经有很长时间了,但我不记得必须动态加载它。它只是 IDirectDraw7 接口的一个方法,并且像任何其他方法一样被调用。

于 2012-03-29T23:49:14.477 回答
1

ddraw.dll中没有导出SetCooperativeLevel函数。使用DUMPBIN实用程序并自己检查。您可以使用 获取DirectDrawCreate/DirectDrawCreateEx和类似功能GetProcAddress,但不能提取 COM 对象的单个方法。

文章很荒谬,没有意义。也许它应该告诉你DirectDrawCreate从 ddraw.dll 或类似的东西中获取,但没有什么理由这样做。

IDirectDraw7 接口提供的链接ddraw.lib、调用DirectDrawCreate和访问方法。

PS 如果您不熟悉 dumpbin,我建议您至少学习一下该实用程序的基本用法。

于 2012-03-29T23:50:31.440 回答
0

从DX9开始,ddraw.lib完全从SDK中移除,所以需要调用LoadLibrary/GetProcAddress来调用DirectDrawCreate或DirectDrawEnumerate。不幸的是,MSDN 弄错了,并将 GetProcAddress 注释添加到每个 DirectDraw 函数,甚至是 COM 接口的方法。

于 2015-03-15T13:36:58.980 回答