Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Speicher für Pchar allokieren (https://www.delphipraxis.net/90829-speicher-fuer-pchar-allokieren.html)

DelphiManiac 24. Apr 2007 14:16


Speicher für Pchar allokieren
 
Hallo,

habe folgendes Problem,

ich erstelle eine DLL die eine Funktion hat, die einen String übergibt (als Parameter)
Da ich kompatibel zu C und anderen Programmiersprachen sein will, würde ich hier gerne einen PChar übergeben(
Pointer auf das 1. Zeichen einer Zeichenkette).

Folgende Funktion habe ich:

Delphi-Quellcode:
function Get_GeraeteTyp(DataPointer:PChar):Cardinal;stdcall;
var
  Text:string;
begin
  Obj.Get_Geraetetyp(Text);
  DataPointer:=PChar(Text); // Hier setze ich ja den Zeiger auf eine lokale String Variable, die evtl, nach Verlassen der Funktion gar nicht mehr existiert
// wie kann ich hier Speicher für den String (bzw PChar) global auf dem Heap allokieren????
end;
Danke euch

3_of_8 24. Apr 2007 14:20

Re: Speicher für Pchar allokieren
 
Mit Delphi-Referenz durchsuchenNew kriegst du Speicher, mit Delphi-Referenz durchsuchenDispose wirst du ihn wieder los.

DelphiManiac 24. Apr 2007 14:29

Re: Speicher für Pchar allokieren
 
Hi,

ich will eigentlich nicht den Speicher eines Pointers allokieren,
sondern den eine Strings, so das der im Speicher bestehen bleibt, und ich dann
die Adress auf das erste Byte (PChar) übergeben kann....

DGL-luke 24. Apr 2007 14:38

Re: Speicher für Pchar allokieren
 
Hallo,

Delphi-Referenz durchsuchenGetMem sollte hier besser funktionieren.

Achte aber darauf, dass die strings auch wieder freigegeben werden.

DelphiManiac 24. Apr 2007 15:38

Re: Speicher für Pchar allokieren
 
Hallo,

danke für eure Antworten,

ich hatte eine Gedanken-Fehler drin:

Ich muss ja vor dem Aufruf der Funktion aus der DLL den Speicher schon allokieren und dann nur den
Pointer (Pchar) übergeben, dann muss ich einfach nur noch den String kopieren, das habe ich
jetzt mit StrCopy gelöst...

Also Danke nochmal!

Muetze1 24. Apr 2007 23:22

Re: Speicher für Pchar allokieren
 
Da du eh mit C kompatibel sein willst, dann geb die Grösse des Puffers mit und überprüfe vor dem StrCopy(), ob das ganze da überhaupt reinpasst.

Deine Idee mit dem allziieren in deiner DLL ist nicht so gut, weil der DLL Speichermanager alloziiert und der App Speichermanager des Aufrufers die Heapverwaltung nicht kennt und somit das auch nicht wieder freigeben kann. Am besten ist es immer den Speicher in der App zu alloziieren und dann der DLL zu überreichen. Siehe dazu auch Luckies Beitrag


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