Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Kurzes Delphiprogramm in dll umwandeln. (https://www.delphipraxis.net/101448-kurzes-delphiprogramm-dll-umwandeln.html)

Explorer 13. Okt 2007 14:04


Kurzes Delphiprogramm in dll umwandeln.
 
Hallo Forum,

habe mir ein kleines Programm geschrieben, welches den Usernamen ausliest.
Möchte nun dasselbige in eine dll umschreiben, was mir einfach nicht gelingen mag.
Was mache ich falsch ?

Über einen konstruktiven Tipp wäre ich dankbar.

Mit besten Grüßen

Explorer

---------Prog--------------

Delphi-Quellcode:
unit user_ermitteln;

interface

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


procedure ErmittleUser(MyWideString: PWideChar); stdcall; export;


implementation


procedure ErmittleUser(MyWideString: PWideChar); stdcall; export;

var
User_angemeldet: String;
UserName: String;
UserNameLen: DWord;
StringLaenge :Integer;

begin
If GetUserName(PChar(UserName), UserNameLen) Then
begin
User_angemeldet := Copy(UserName,1,UserNameLen - 1);
StringLaenge := Length(User_angemeldet)+1 ;
StringToWideChar(User_angemeldet, MyWideString, StringLaenge);
ShowMessage(User_angemeldet);
end
else
StringLaenge := Length('unbekannt')+1 ;
StringToWideChar('unbekannt', MyWideString, StringLaenge)
end;



end.

mkinzler 13. Okt 2007 14:06

Re: Kurzes Delphiprogramm in dll umwandeln.
 
Unit in ein Dll-Projekt einbinden und gewünschte Funktion(en) exportieren.

Explorer 13. Okt 2007 16:12

Re: Kurzes Delphiprogramm in dll umwandeln.
 
Zitat:

Zitat von mkinzler
Unit in ein Dll-Projekt einbinden und gewünschte Funktion(en) exportieren.

-Unit ist ! bereits in eine lib eingebunden und - leicht aus dem code ersichtlich - auch bereits exportiert.

Das Problem ist, dass ich über GetUserName keinen Wert zurück geliefert erhalte.

Luckie 13. Okt 2007 16:47

Re: Kurzes Delphiprogramm in dll umwandeln.
 
Wie rufst du sie denn auf? Und warum ist das Argument ein PWideChar, wenn du in der Funktion nur mit normalen Strings arbeitest?

Und zu Strings und DLLs: http://www.michael-puff.de/Artikel/2...ring_DLL.shtml

Bernhard Geyer 13. Okt 2007 16:57

Re: Kurzes Delphiprogramm in dll umwandeln.
 
Das Problem wird der Aufruf der GetuserName-Funktion in der Win-API sein.
Mich wundert nur das es nicht kracht. Könnte aber sein weil UserNameLen zufälligerweise immer 0 ist und damit die Funktion weis das sie einen Puffer der Länge 0 hat in den sie den Namen kopieren kann.

Und nochwas: Wer sorgt dafür das die Variable MyWideString auch auf einen Speicherbereich zeigt der auch angefordert wurde? Letzendlich ist die Funktion ErmittleUser eine zu 100% sinnlose Funktion wenn man sie in einer DLL mit C-Kompatibler Schnittstelle bereitstellt.

Explorer 13. Okt 2007 18:28

Re: Kurzes Delphiprogramm in dll umwandeln.
 
Zitat:

Zitat von Luckie
Wie rufst du sie denn auf? Und warum ist das Argument ein PWideChar, wenn du in der Funktion nur mit normalen Strings arbeitest?

Und zu Strings und DLLs: http://www.michael-puff.de/Artikel/2...ring_DLL.shtml

Das Interface meiner Datenbank nimmt nur PWideChar entgegen.

Explorer 13. Okt 2007 18:30

Re: Kurzes Delphiprogramm in dll umwandeln.
 
Zitat:

Zitat von Bernhard Geyer
Das Problem wird der Aufruf der GetuserName-Funktion in der Win-API sein.
Mich wundert nur das es nicht kracht. Könnte aber sein weil UserNameLen zufälligerweise immer 0 ist und damit die Funktion weis das sie einen Puffer der Länge 0 hat in den sie den Namen kopieren kann.

Und nochwas: Wer sorgt dafür das die Variable MyWideString auch auf einen Speicherbereich zeigt der auch angefordert wurde? Letzendlich ist die Funktion ErmittleUser eine zu 100% sinnlose Funktion wenn man sie in einer DLL mit C-Kompatibler Schnittstelle bereitstellt.

Genau das ist scheinbar das tatsächliche Problem. GetUserName liefert eben keinen String zurück.

Luckie 13. Okt 2007 18:44

Re: Kurzes Delphiprogramm in dll umwandeln.
 
Dann lies dir mal durch, was in meinem verlinktem Artikel steht.

Explorer 14. Okt 2007 10:33

Re: Kurzes Delphiprogramm in dll umwandeln.
 
Zitat:

Zitat von Luckie
Dann lies dir mal durch, was in meinem verlinktem Artikel steht.

Ich bringe das Problem auf den Punkt: ich benötige einen Zugriff auf die GetUserName-Funktion in der Windows.pas, weiss indes nicht, wie dies zu bewerkstelligen ist.

näheres unter: http://www.delphi-forum.de/topic_Kur...eln_77313.html

Gruß
Explorer

Bernhard Geyer 14. Okt 2007 11:19

Re: Kurzes Delphiprogramm in dll umwandeln.
 
Zitat:

Zitat von Explorer
Zitat:

Zitat von Luckie
Dann lies dir mal durch, was in meinem verlinktem Artikel steht.

Ich bringe das Problem auf den Punkt: ich benötige einen Zugriff auf die GetUserName-Funktion in der Windows.pas, weiss indes nicht, wie dies zu bewerkstelligen ist.

Lesen ist angesagt. Einerseits hat Luckie dich auf ein Tutorial hingewiesen das mit Sicherheit die üblichen Fehler bei Verwendung von P(Wide)Chars auflistet und andererseits habe ich dich genauer auf die Fehler in deinem Code hingewiesen. Wenn du dieses Tutorial nicht lesen willst werden Luckie und ich dir nicht weiter helfen wollen. Und ab es andere noch wollen?

Zitat:

Zitat von Explorer

Bringt keine neuen Infos.


Wenn du nun eine fertige funktionsfähige Implementierung der verwendung von GetUserName haben willst, schau dir die Funktion GetLocalUserName aus der Unit JclSysInfo der JCL an und verstehe was dort anders gemacht wird.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:32 Uhr.
Seite 1 von 2  1 2      

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