Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi string / PChar Problem in funktion / dll (https://www.delphipraxis.net/25621-string-pchar-problem-funktion-dll.html)

MaBuSE 9. Jul 2004 13:36


string / PChar Problem in funktion / dll
 
Hallo,

ich habe folgende Definition einer Funktion in einer DLL:
Code:
BOOL __declspec(dllexport) GetUser    (LPSTR sDomain, LPSTR sUser, DWORD nLen);
in Delphi sieht das bei mir so aus:
Delphi-Quellcode:
function GetUser(sDomain: LPSTR; var sUser: LPSTR; var nLen: DWORD):BOOL; stdcall; overload;
...
exports
  GetUser(sDomain: LPSTR; var sUser: LPSTR; var nLen: DWORD) name 'GetUser';
Mein Problem ist die Übergabe eines Strings als LPSTR.

Delphi-Quellcode:
function myMagicFunc(const sDomain: string; var SUser: string):Boolean;
...

function GetUser(sDomain: LPSTR; var sUser: LPSTR; var nLen: DWORD):BOOL;
var
  sD,
  sU: string;
  cU: array of Char;
begin
  sD := sDomain;
  sU := sUser;
  Result := myMagicFunc(sD, sU);

  // string sU in array of char cU umwandeln
  setlength(cU, length(sU));
  StrLCopy(@cU[0],@sU[1],length(cU));

  sUser := PansiChar(cU);
  nLen := Length(cU);

  // Compiler-Hinweis Beseitigung ;-)
  if sUser = sDomain then ;
end;
Das will nicht so wie ich will !!!

Gibt beim Aufruf eine Schutzverletzung.

Weiß jemand Rat ?

[edit]Als offene Frage markiert[/edit]

mirage228 7. Aug 2004 17:44

Re: string / PChar Problem in funktion / dll
 
Hi,

vielleicht hilft dir die Funktion Delphi-Referenz durchsuchenStrPCopy weiter.
Du musst vorher natürlich mit Delphi-Referenz durchsuchenGetMem Speicher für deinen PChar reservieren (mindestens Length(MyString)).

Dann sollte es gehen.

mfG
mirage228

NicoDE 7. Aug 2004 18:14

Re: string / PChar Problem in funktion / dll
 
Zitat:

Zitat von mirage228
vielleicht hilft dir die Funktion Delphi-Referenz durchsuchenStrPCopy weiter.

Delphi-Referenz durchsuchenStrLCopy ist sicherer (Pufferüberlauf).

mirage228 7. Aug 2004 18:24

Re: string / PChar Problem in funktion / dll
 
Zitat:

Zitat von NicoDE
Zitat:

Zitat von mirage228
vielleicht hilft dir die Funktion Delphi-Referenz durchsuchenStrPCopy weiter.

Delphi-Referenz durchsuchenStrLCopy ist sicherer (Pufferüberlauf).

Ja?

Eigentlich ist StrPCopy doch nur eine Projektion von StrLCopy!?

mfG
mirage228

NicoDE 7. Aug 2004 18:29

Re: string / PChar Problem in funktion / dll
 
Zitat:

Zitat von mirage228
Eigentlich ist StrPCopy doch nur eine Projektion von StrLCopy!?

Was meinst Du mit Projektion?

Man kann natürlich auch vorher die Länge des Eingabestrings ermitteln und prüfen, ob der Puffer groß genug ist. Oder man legt den Puffer anhand der Länge des Eingabestring an - dann erübrigen sich die Prüfungen von selbst :)

---

Delphi-Referenz durchsuchenStrPCopy
Code:
Description

StrPCopy copies a Pascal-type string Source into a null-terminated string Dest. It returns a pointer to Dest.

StrPCopy does not perform any length checking.

The destination buffer must have room for at least Length(Source)+1 characters.

mirage228 7. Aug 2004 18:37

Re: string / PChar Problem in funktion / dll
 
Zitat:

Zitat von NicoDE
Zitat:

Zitat von mirage228
Eigentlich ist StrPCopy doch nur eine Projektion von StrLCopy!?

Was meinst Du mit Projektion?

Das StrPCopy selbst nur StrLCopy aufruft (man muss halt weniger Parameter angeben).

Da muss man natürlich vorsichtig sein, indem man vorher genug Speicher reserviert...

mfG
mirage228

NicoDE 7. Aug 2004 18:57

Re: string / PChar Problem in funktion / dll
 
Zitat:

Zitat von mirage228
Das StrPCopy selbst nur StrLCopy aufruft

Mag sein. Der Unterschied ist, dass StrPCopy die Länge des Eingabesstrings an StrLCopy übergibt - nicht die Größe des Puffers.

MaBuSE 9. Aug 2004 08:55

Re: string / PChar Problem in funktion / dll
 
Vielen Dank für die Antworten, ich werde das ausprobieren und "mein" Ergebnis hier posten.
(Offene Frage wird als beantwortet markiert)

:dp:


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:12 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