Einzelnen Beitrag anzeigen

Benutzerbild von mr47
mr47

Registriert seit: 6. Dez 2004
Ort: Stuttgart
644 Beiträge
 
Delphi 2005 Personal
 
#3

Re: Prozeduren aus einer Unit in anderen Programme benutzen

  Alt 26. Dez 2004, 12:07
Also. Ich hab jetzt folgendes herausgefunden:

@: Duffy: Nein das hab ich erst vergessen. Als ich das Ausprobieren wollte ist mir aufgefallen dass ich die Proceduren in eine Unit von einem Programm geschrieben hab! Als ich das gemerkt hab, hab ich sie dann in ne Unit reinkopiert (also ohne TForm usw.). Aber da passiert immer folgendes:

Also erst mal der Code: (hat was mit DirectX-Programmierung zu tun, und Die Funktion stand so im Buch (Aber eben NUR die Funktion !)):

Delphi-Quellcode:
unit dxHelpUnit;

interface

function DHInitDGfx(_handle: hwnd; _fullscreen: boolean; _width,_height, _bits: longint;
                _Hal: Boolean; out _IDirect3D9: IDirect3D9;
                out _IDirect3DDevice9 : IDirect3DDevice9) :boolean;

uses d3d9;


implementation

function DHInitDGfx(_handle: hwnd; _fullscreen: boolean; _width,_height, _bits: longint;
                _Hal: Boolean; out _IDirect3D9: IDirect3D9;
                out _IDirect3DDevice9 : IDirect3DDevice9) :boolean;
var
  d3dpp :TD3DPresent_Parameters;
  d3ddm :TD3DDisplayMode;
  dtype :Td3DDevType;
  D3DCaps9 :Td3DCaps9;
  hardWareVertexProcessing: Boolean;
  VertexProcessing: Integer;
begin
  Result:=false;
  _IDirect3D9 := Direct3DCreate9(D3D_SDK_Version);
  if (_IDirect3D9 = nil) then exit;

  Fillchar(d3dpp, sizeOf(d3dpp),0);
  with d3dpp do begin
    Windowed:= not _fullscreen;
    SwapEffect:= D3DSwapEffect_DisCard;
    if (_fullscreen) then begin
      BackBufferWidth:= _width;
      BackBufferHeight:= _height;
      case _bits of
        16: BackbufferFormat:= D3DFMT_R5G6B5;
        32: BackBufferFormat:= D3Dfmt_A8R8G8B8;
        else exit;
      end;
    end else
    begin
      if failed(_IDirect3d9.GetAdapterDisplayMode(D3DAdapter_Default,d3ddm)) then exit;
    BackBufferFormat:= d3ddm.format;
    end;
  end;
  _IDirect3d9.GetDeviceCaps(D3DAdapter_Default , d3dDevType_Hal , D3dCaps9);
  hardWareVertexProcessing := D3DCaps9.DevCaps and
    D3DDEvCaps_HWTransformandLight<>0;
  if hardWareVertexProcessing then
    vertexProcessing := D3DCreate_Hardware_VertexProcessing
  else
    VertexProcessing := D3DCreate_Software_VertexProcessing;
  if _hal then
    dType:= D3DDevType_Hal
  else
    dType := D3DDevType_Ref;
  if failed(_IDirect3d9.CreateDevice(D3DAdapter_Default, dType,_handle,vertexProcessing,
      d3dpp,_IDirect3dDevice9)) then begin
    exit;
  end;
  Result:=true;
end;

procedure DHCloseDGFX(_IDirect3D9: IDirect3D9; _IDirect3DDevice9:IDirect3DDevice9);
begin
  _IDirect3DDevice9 := nil;
  _IDirect3D9 := nil;
end;

end.
Eigentlich lässt sich die Unit jetzt sogar kompilieren. Aber wenn ich von ner anderen Unit drauf zu greifen will, sagt er immer dass der Begriff hwnd; (aus der ersten Zeile) nicht geklärt ist! Was ist da jetzt noch falsch? Man kann die Unit alleine kompilieren!

Danke für eure antworten...
  Mit Zitat antworten Zitat