procedure GetPrimarySurface;
var
ddsd:DDSURFACEDESC2;hr:HResult;
begin
if g_lplpDD<>nil then
begin
ZeroMemory(@ddsd,sizeof(DDSURFACEDESC));
ddsd.dwSize:= sizeof( ddsd );
ddsd.dwFlags:= DDSD_CAPS ;
ddsd.ddsCaps.dwCaps:=DDSCAPS_PRIMARYSURFACE;
hr:=g_lplpDD.EnumSurfaces( DDENUMSURFACES_MATCH, ddsd, nil, @EnumSurfacesProc);
if hr=DD_OK then showmessage('GetPrimarySurface,DD_OK')
else showmessage('GetPrimarySurface,Error:='+inttostr(hr)+';ox'+format('%x',[hr]))
showmessage(inttostr(hr-_MAKE_DDHRESULT));
end;
end;为什么调用EnumSurfaces不成功,返回的hr=_MAKE_DDHRESULT + 100,根本就没进回调函数(在回调函数最前面加ShowMessage未被调用)
(*
* One or more of the caps bits passed to the callback are incorrect.
*)
DDERR_INVALIDCAPS = HResult(_MAKE_DDHRESULT + 100);
var
ddsd:DDSURFACEDESC2;hr:HResult;
begin
if g_lplpDD<>nil then
begin
ZeroMemory(@ddsd,sizeof(DDSURFACEDESC));
ddsd.dwSize:= sizeof( ddsd );
ddsd.dwFlags:= DDSD_CAPS ;
ddsd.ddsCaps.dwCaps:=DDSCAPS_PRIMARYSURFACE;
hr:=g_lplpDD.EnumSurfaces( DDENUMSURFACES_MATCH, ddsd, nil, @EnumSurfacesProc);
if hr=DD_OK then showmessage('GetPrimarySurface,DD_OK')
else showmessage('GetPrimarySurface,Error:='+inttostr(hr)+';ox'+format('%x',[hr]))
showmessage(inttostr(hr-_MAKE_DDHRESULT));
end;
end;为什么调用EnumSurfaces不成功,返回的hr=_MAKE_DDHRESULT + 100,根本就没进回调函数(在回调函数最前面加ShowMessage未被调用)
(*
* One or more of the caps bits passed to the callback are incorrect.
*)
DDERR_INVALIDCAPS = HResult(_MAKE_DDHRESULT + 100);
比如:g_lplpDD 是什么?我们都不知道,怎么调?
g_lplpDD: IDirectDraw7;
function MyDirectDrawCreateEx(lpGUID: PGUID; out lplpDD: IDirectDraw7;
const iid: TGUID; pUnkOuter: IUnknown): HResult; stdcall;
type
TNewDirectDrawCreateEx=function(lpGUID: PGUID; out lplpDD: IDirectDraw7;
const iid: TGUID; pUnkOuter: IUnknown): HResult; stdcall;
begin
//showmessage('MyDirectDrawCreateEx');
Hook[2].UnHook;
Result := TNewDirectDrawCreateEx(Hook[2].BaseAddr)(lpGUID, lplpDD, iid, pUnkOuter);
Hook[2].Hook;
if Result<>DD_OK then Exit;
Result:=lplpDD.QueryInterface(IID_IDirectDraw7,g_lplpDD);
if Result<>S_OK then
begin
showmessage('QueryInterface failed!');
Exit;
end;
end;