Форум: "Начинающим";
Текущий архив: 2014.02.02;
Скачать: [xml.tar.bz2];
ВнизИнтерфейсы Найти похожие ветки
← →
ttt (2013-03-28 17:02) [0]Добрый день.
Как отследить вызов функций интерфейса, созданного вне моего приложения?
Сейчас пробую так:function Direct3DCreate9(SDKVersion: LongWord): Pointer;
begin
result:= _Direct3DCreate9(SDKVersion);
if Assigned(result) then begin
result:= TDirect3D9.Create(result);
Writeln("call d3d9.dll:Direct3DCreate9(", SDKVersion, ") = ", Cardinal(result), " - overridden");
end else
Writeln("call d3d9.dll:Direct3DCreate9(", SDKVersion, ") = ", Cardinal(result));
end;
Где TDirect3D9:TDirect3D9 = class(TInterfacedObject, IDirect3D9)
private
D3D9: IDirect3D9;
public
function RegisterSoftwareDevice(pInitializeFunction: Pointer): HResult; stdcall;
function GetAdapterCount: LongWord; stdcall;
function GetAdapterIdentifier(Adapter: LongWord; Flags: DWord; out pIdentifier: TD3DAdapterIdentifier9): HResult; stdcall;
function GetAdapterModeCount(Adapter: LongWord; Format: TD3DFormat): LongWord; stdcall;
function EnumAdapterModes(Adapter: LongWord; Format: TD3DFormat; Mode: LongWord; out pMode: TD3DDisplayMode): HResult; stdcall;
function GetAdapterDisplayMode(Adapter: LongWord; out pMode: TD3DDisplayMode): HResult; stdcall;
function CheckDeviceType(Adapter: LongWord; CheckType: TD3DDevType; AdapterFormat, BackBufferFormat: TD3DFormat; Windowed: BOOL): HResult; stdcall;
function CheckDeviceFormat(Adapter: LongWord; DeviceType: TD3DDevType; AdapterFormat: TD3DFormat; Usage: DWord; RType: TD3DResourceType; CheckFormat: TD3DFormat): HResult; stdcall;
function CheckDeviceMultiSampleType(Adapter: LongWord; DeviceType: TD3DDevType; SurfaceFormat: TD3DFormat; Windowed: BOOL; MultiSampleType: TD3DMultiSampleType; pQualityLevels: PDWORD): HResult; stdcall;
function CheckDepthStencilMatch(Adapter: LongWord; DeviceType: TD3DDevType; AdapterFormat, RenderTargetFormat, DepthStencilFormat: TD3DFormat): HResult; stdcall;
function CheckDeviceFormatConversion(Adapter: LongWord; DeviceType: TD3DDevType; SourceFormat, TargetFormat: TD3DFormat): HResult; stdcall;
function GetDeviceCaps(Adapter: LongWord; DeviceType: TD3DDevType; out pCaps: TD3DCaps9): HResult; stdcall;
function GetAdapterMonitor(Adapter: LongWord): HMONITOR; stdcall;
function CreateDevice(Adapter: LongWord; DeviceType: TD3DDevType; hFocusWindow: HWND; BehaviorFlags: DWord; pPresentationParameters: PD3DPresentParameters; out ppReturnedDeviceInterface: IDirect3DDevice9): HResult; stdcall;
constructor Create(_D3D9: pointer);
end;
← →
ttt (2013-03-28 17:04) [1]
> function TDirect3D9.CreateDevice(Adapter: LongWord; DeviceType:
> TD3DDevType; hFocusWindow: HWND; BehaviorFlags: DWord;
> pPresentationParameters: PD3DPresentParameters; out ppReturnedDeviceInterface:
> IDirect3DDevice9): HResult;
> begin
> Writeln("!");
> result:= D3D9.CreateDevice(Adapter, DeviceType, hFocusWindow,
> BehaviorFlags, pPresentationParameters, ppReturnedDeviceInterface);
>
> end;
>
> constructor TDirect3D9.Create(_D3D9: pointer);
> begin
> D3D9:= IDirect3D9(_D3D9);
> end;
Ну и т.д.
В итоге данные махинации приводят к крашу.
← →
ttt (2013-03-28 17:14) [2]Я так понимаю в получатель вызываются функции по порядку интерфейса, а меня по этим адресам всякая лажа для работы с классами. Или я не прав?
← →
ttt (2013-03-28 17:33) [3]Извиняйте за панику.
result:= Pointer(IDirect3D9(TDirect3D9.Create(result)));
← →
ttt (2013-03-29 16:12) [4]И вот я продвинулся немного дальше, а вопросы интерфейсов всё никак не разрешатся.
function TDirect3DDevice9.SetTexture(Stage: DWord; pTexture: IDirect3DBaseTexture9): HResult;
var
si: _D3DSURFACE_DESC;
begin
if Assigned(pTexture) and (pTexture.GetType = D3DRTYPE_TEXTURE) then begin
IDirect3DTexture9(pTexture).GetLevelDesc(0, si);
end;
result:= D3DDevice9.SetTexture(Stage, pTexture);
end;
Здесь я пытаюсь узнать размер текстуры. Как показывает IDirect3DResource9.GetType это действительно IDirect3DTexture9. Но при попытке вызвать IDirect3DTexture9.GetLevelDesc ошибка. В чем проблема?
← →
Sapersky (2013-03-29 17:36) [5]Такое что ли нужно?
http://forum.sources.ru/index.php?showtopic=339598
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2014.02.02;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.002 c