![]() |
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:
Danke euch
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; |
Re: Speicher für Pchar allokieren
|
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.... |
Re: Speicher für Pchar allokieren
Hallo,
![]() Achte aber darauf, dass die strings auch wieder freigegeben werden. |
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! |
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 ![]() |
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