正如IDirectDraw7::SetCooperativeLevel method的文档中所述,它声明了
您必须使用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);
}
答案 0 :(得分:1)
我认为这是一个文档错误。自从我使用DirectDraw7以来已经很长时间了,但我不记得必须动态加载它。它只是IDirectDraw7接口的一种方法,并且像任何其他方法一样被调用。
答案 1 :(得分:1)
ddraw.dll中没有导出的SetCooperativeLevel
函数。使用DUMPBIN
实用程序并自行检查。您可以使用DirectDrawCreate
获取DirectDrawCreateEx
/ GetProcAddress
和类似函数,但无法提取COM对象的各个方法。
文章非常荒谬,没有意义。也许应该告诉你从ddraw.dll或类似的东西中获取DirectDrawCreate
,但没有理由这样做。
与ddraw.lib
关联,致电DirectDrawCreate
并访问IDirectDraw7界面提供的方法。
P.S。如果您不熟悉dumpbin,我建议至少学习该实用程序的基本用法。
答案 2 :(得分:0)
自DX9以来,ddraw.lib已从SDK中完全删除,因此您需要调用LoadLibrary / GetProcAddress来调用DirectDrawCreate或DirectDrawEnumerate。不幸的是,MSDN弄错了,并将GetProcAddress注释添加到每个DirectDraw函数,甚至是COM接口'方法