Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Funktionen direkt einbinden (https://www.delphipraxis.net/45933-funktionen-direkt-einbinden.html)

Rastaman 14. Mai 2005 21:26


Funktionen direkt einbinden
 
Hallo. Ich habe da mal n Problem :shock:

Wie binde ich direkt Funktionen in ein Projekt ein?
Z.b möchte ich nicht irgendeine unit einbinden sondern direkt eine WinApi funktion ansprechen so wie Visual Basic das macht.
( " Private Function CreateWindowEx lib "kernel32.dll" " ) etc. Ich möchte die Funktionen halt nicht über die Units nutzen.

Vielen Dank schon mal.

Dax 14. Mai 2005 21:37

Re: Funktionen direkt einbinden
 
Um direkt API-Funktionen zu nutzen gibts Units wie Windows, ShellAPI.. such mal in Source/Rtl/Windows. da sollten dir glaube ich sein.

Rastaman 14. Mai 2005 21:47

Re: Funktionen direkt einbinden
 
Sorry aber ich werd aus deinem Post überhaupt nicht schlau...

DGL-luke 14. Mai 2005 22:11

Re: Funktionen direkt einbinden
 
das steht doch alles in der hilfe. einfach bei filter winapi windows platform sdk auswählen.

Christian Seehase 14. Mai 2005 22:18

Re: Funktionen direkt einbinden
 
Moin Gerrit,

ich weiss jetzt nicht, welche chm-Datei das gewesen sein könnte, aber die gewünschte Dokumentation findest Du u.a. hier:

Windows Platform SDK

Man muss übrigens nicht unbedingt alles herunterladen (ca. 350MB), sondern kann das auch auswählen.

In der D2005 PE habe ich auch mal eben nachgesehen:
Bei mir ist, zumindest wohl ein Teil, der Doku die Du suchst enthalten (wie üblich).
CreateWindowEx konnte ich darin, z.B., finden.

Das sollte bei Dir also auch da sein (oder es liegt daran, dass ich vorher mal die D2005 Architekt Trial installiert hatte ;-))

Zu Deiner zweiten Frage:
Mache bitte einen neuen Thread auf.
Hier gilt die Regel: Eine Frage pro Thread.

Danke.

Rastaman 14. Mai 2005 22:34

Re: Funktionen direkt einbinden
 
Ok die 2te Frage ist viel wichtiger.
Also lasst die erste frage weg und nehmt die 2te.
Ich lösch mal die Erste

Pr0g 14. Mai 2005 22:49

Re: Funktionen direkt einbinden
 
Schau dir doch mal den Code in der "Windows.pas" an, hier nen Beispiel (habs nicht getestet, müsste aber gehen:
Delphi-Quellcode:
...

function CreateWindowEx(dwExStyle: DWORD; lpClassName: PChar;
  lpWindowName: PChar; dwStyle: DWORD; X, Y, nWidth, nHeight: Integer;
  hWndParent: HWND; hMenu: HMENU; hInstance: HINST; lpParam: Pointer): HWND; stdcall;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function CreateWindowEx; external 'user32.dll' name 'CreateWindowExA';

procedure TForm1.Button1Click(Sender: TObject);
begin
  CreateWindowEx(...);
end;

end.
Nur obs bei der so was bringt glaube ich nicht, da sie eh in der Windows.pas steckt, welche du einbinden musst.

Aber warum das ganze?

MfG Pr0g

Kernel32.DLL 14. Mai 2005 22:51

Re: Funktionen direkt einbinden
 
Zitat:

Zitat von Pr0g
Schau dir doch mal den Code in der "Windows.pas" an, hier nen Beispiel (habs nicht getestet, müsste aber gehen:
Delphi-Quellcode:
...

function CreateWindowEx(dwExStyle: DWORD; lpClassName: PChar;
  lpWindowName: PChar; dwStyle: DWORD; X, Y, nWidth, nHeight: Integer;
  hWndParent: HWND; hMenu: HMENU; hInstance: HINST; lpParam: Pointer): HWND; stdcall;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function CreateWindowEx; external 'user32.dll' name 'CreateWindowExA';

procedure TForm1.Button1Click(Sender: TObject);
begin
  CreateWindowEx(...);
end;

end.
Nur obs bei der so was bringt glaube ich nicht, da sie eh in der Windows.pas steckt, welche du einbinden musst.

Aber warum das ganze?

MfG Pr0g

Vllt. glaubt er so die Größe der Echse reduzieren zu können....

Rastaman 14. Mai 2005 23:12

Re: Funktionen direkt einbinden
 
Wieso " vielleicht denkt er " ??

Kernel32.DLL 15. Mai 2005 15:15

Re: Funktionen direkt einbinden
 
Zitat:

Zitat von Gerrit89
Wieso " vielleicht denkt er " ??

Weil ich leider deine Gedanken nicht lesen kann und das daher auch nur vermuten kann.

=> Wenn du die Windows.pas aus deinem Projekt rausschmeißt, wird es dadurch imho nicht kleiner.

MathiasSimmack 15. Mai 2005 15:19

Re: Funktionen direkt einbinden
 
Richtig! :roll: Ich amüsiere mich auch immer, dass die Leute die Units Windows und ActiveX oder ShellAPi rausschmeißen möchten, aber die tatsächlichen Brocken wie SysUtils, Registry o.ä. gern nutzen.

Rastaman 18. Mai 2005 19:48

Re: Funktionen direkt einbinden
 
is jetz nur n Beispiel !!

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
function ShellExecute(
    hwnd: HWND;
    lpOperation,
    lpFile,
    lpParameters,
    lpDirectory: PChar;
    nShowCmd: Integer
): HWND; stdcall;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function ShellExecute: HWND; external 'shell32.dll' name 'ShellExecute';

procedure TForm1.FormCreate(Sender: TObject);
begin
  ShellExecute(Self.Handle,'open','http://www.google.de',0,0,SW_SHOWNORMAL);
end;

end.
[Fehler] Unit1.pas(13): E2065 Ungenügende Forward- oder External-Deklaration: 'TForm1.ShellExecute'

Kernel32.DLL 18. Mai 2005 20:42

Re: Funktionen direkt einbinden
 
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
  public
    { Public-Deklarationen }
  end;

function ShellExecute( //>= Nimm den Kram aus dem Private - Teil
    hwnd: HWND;
    lpOperation,
    lpFile,
    lpParameters,
    lpDirectory: PChar;
    nShowCmd: Integer
): HWND; stdcall;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function ShellExecute; external 'shell32.dll' name 'ShellExecuteA'; //<= Nimm die "A"-Variante und ohne HWND!

procedure TForm1.FormCreate(Sender: TObject);
begin
  ShellExecute(Self.Handle,'open','http://www.google.de',0,0,SW_SHOWNORMAL);
end;

end.
BTW: Ob's geht, weiß ich nicht, aber es müsste sich kompilieren lassen.

In eigener Sache: War eigentlich ganz nett mit euch im Forum, aber ich mach 'nen Neuanfang. Wer über MSCQ up-to-date bleiben möchte, kann sich ja im Newsletter auf meiner Seite danielstools.de eintragen. Kann bis zu einer neuen Version aber noch etwas dauern... Man schreibt sich...


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:37 Uhr.

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