Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Prozeduren aus einer Unit in anderen Programme benutzen (https://www.delphipraxis.net/36793-prozeduren-aus-einer-unit-anderen-programme-benutzen.html)

mr47 26. Dez 2004 00:05


Prozeduren aus einer Unit in anderen Programme benutzen
 
Hi Leute!

{ --Zusatzinfo :-D
Ich hab zwar danach gesucht aber auf die schnelle nix gefunden!
Wenns irgendwo ein Thema mit diesem Problem schon gibt, dann schlagt mich zusammen und sendet mir (falls ich noch ganz bin) bitte den Link!
-- }

Also mein Prob:

Ich hab eine Unit geschrieben in der einige Prozeduren enthalten sind. So jetzt will ich die aus einem anderen Programm auch benutzen. Die Unit wurde in
...\...\Delphi7\Lib gespeichert!!


Also schreibe ich in den "Programmkopf" zu den gazen Punkten von Uses auch den Namen der Unit dazu:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,DxHelp;
Wenn ich aber jetzt eine Prozedur aus dieser Unit in einem anderen Programm verwenden will kommt immer
[delphi] Unclearedidentifer: "HInitDGfx".

Was mach ich falsch????

Thx für euere Hilfe....

Duffy 26. Dez 2004 00:17

Re: Prozeduren aus einer Unit in anderen Programme benutzen
 
Hallo mr47,
sind die Funktionen, Proceduren auch Public, also öffentlich zugänglich?

eine Unit für zwei funktionen erstellen

bye
Claus

mr47 26. Dez 2004 11:07

Re: Prozeduren aus einer Unit in anderen Programme benutzen
 
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... :(

Duffy 26. Dez 2004 11:30

Re: Prozeduren aus einer Unit in anderen Programme benutzen
 
Hallo mr47,
Delphi-Quellcode:
unit dxHelpUnit;

interface

uses d3d9, Windows; // <== Hier fehlte die Unit Windows


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

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
  ...
end;
Du hast die Unit Windows vergessen anzugeben, denn da ist die Variable hwnd deklariert.
bye
Claus

mr47 26. Dez 2004 12:35

Re: Prozeduren aus einer Unit in anderen Programme benutzen
 
Vielen Dank Duffy ! jetzt funzts!!

:-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:59 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz