AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Kurzes Delphiprogramm in dll umwandeln.
Thema durchsuchen
Ansicht
Themen-Optionen

Kurzes Delphiprogramm in dll umwandeln.

Ein Thema von Explorer · begonnen am 13. Okt 2007 · letzter Beitrag vom 4. Dez 2007
 
rbonk

Registriert seit: 10. Aug 2006
3 Beiträge
 
#13

Re: Kurzes Delphiprogramm in dll umwandeln.

  Alt 15. Okt 2007, 15:52
Hallo Explorer,

mir ist auch unklar warum es der Umweg über eine eigene DLL sein muss und nicht 'advapi32.dll' direkt verwendet werden kann.

Wenns denn sein soll:

Du könntest per Var - Deklaration ausreichend Speicherplatz für den Usernamem in der DLL reservieren, das erspart sie dynamische Allokation und die Frage wo der Speicher wieder freigegeben wird.

(Windows definiert auch irgendwo die max. Länge des Usernamens, hab nicht gefunden wo, 255 sollte reichen)

Delphi-Quellcode:
library getuser;

uses
  Windows;

const
  MAX_USERNAME_LEN = 255;

var
  BUFFER_USERNAME: Array [0..MAX_USERNAME_LEN] of WideChar;

function ErmittleUser (): PWideChar; stdcall;
var
  nSize: Cardinal;

begin
  Result := BUFFER_USERNAME;
  nSize := MAX_USERNAME_LEN;
  if not GetUserNameW (Result, nSize) then
     Result := Nil;
end;

exports
  ErmittleUser;

begin
end.
Sichergestellt sollte dann sein, dass das Programm, das die DLL vewrwendet, nach Aufruf von ErmittleUser() den zurückgelieferten Speicher nur liest !

Delphi-Quellcode:
unit f_usedll;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
  private
  public
  end;

var
  Form1: TForm1;

function ErmittleUser (): PWideChar; stdcall; external 'getuser.dllname 'ErmittleUser';

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var pwUsr: PWideChar;

begin
  pwUsr := nil;
  pwUsr := ErmittleUser();
  if pwUsr = nil then
    raise (Exception.Create('ErmittleUser() fehlgeschlagen'));

  Label1.Caption := pwUsr;

end;

end.
Gruss,
Randolf
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:10 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