代码很简单,但是如果你的显卡有问题,会让你很郁闷
author : 辟邪马甲
另外需要头文件 ddraw.h
库文件 #pragma comment(lib,"dxguid.lib")
#pragma comment(lib,"ddraw.lib") //确保你的库文件是最新的,否则会有版本编译错误给你.
LPDIRECTDRAW7 lpDD7;
LPDIRECTDRAW lpDD;
DDSCAPS2 ddsCaps2;
DWORD dwTotal = 0;
DWORD dwFree = 0;
HRESULT hr;
hr = DirectDrawCreate(NULL,&lpDD,NULL);
if (FAILED(hr))
return ; //
hr = lpDD->QueryInterface(IID_IDirectDraw7, (LPVOID*)&lpDD7);
if (FAILED(hr))
return ; //
ZeroMemory(&ddsCaps2, sizeof(ddsCaps2));
ddsCaps2.dwCaps = DDSCAPS_VIDEOMEMORY; //这个参数就是了
hr = lpDD7->GetAvailableVidMem(&ddsCaps2, &dwTotal, &dwFree);
if (FAILED(hr))
return ; // 如果你的显示卡有问题,这里的hr是成功的,但是dwTotal,dwFree的数据却是0.
如果你用了DXCapsViewer看到的显存也是空的,那么多半你的显卡是有问题了
这个时候建议你拿到另外一台机器上编译.或者干脆换块显卡 ~~
m_strVideoMemTotal.Format( "%d MB", dwTotal / (1024*1024) );
我用的是Microsoft DirectX SDK (April 2006)但是配套的dxguid.lib库文件却会导致版本编译错误,还要更新的版本
另外提醒一下,新版本的DX SDK提供了很多以前没有的功能,起码显卡显存是以前没有的 :)