正如IDirectDraw7 7::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);
}发布于 2012-03-29 23:50:31
在SetCooperativeLevel中没有导出的ddraw.dll函数。使用DUMPBIN实用程序并自己检查它。您可以使用DirectDrawCreate/DirectDrawCreateEx和类似的函数来获取GetProcAddress,但是不能提取COM对象的各个方法。
文章很荒谬,没有道理。也许它应该告诉您从ddraw.dll中获取ddraw.dll或类似的东西,但是没有什么理由这样做。
与ddraw.lib链接,调用DirectDrawCreate和IDirectDraw7接口提供的访问方法。
如果你对垃圾桶不熟悉,我建议至少学习一下这个工具的基本用法。
发布于 2012-03-29 23:49:14
我觉得那是个文档错误。我已经很久没有使用DirectDraw7了,但我不记得必须动态加载它。它只是IDirectDraw7接口的一个方法,和任何其他方法一样被调用。
发布于 2015-03-15 13:36:58
由于DX9完全从SDK中删除了ddraw.lib,所以需要调用LoadLibrary/GetProcAddress来调用DirectDrawCreate或DirectDrawEnumerate。不幸的是,MSDN弄错了,并将GetProcAddress注释添加到每个DirectDraw函数,甚至是COM接口的方法中。
https://stackoverflow.com/questions/9934824
复制相似问题