AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Speicher für Pchar allokieren

Ein Thema von DelphiManiac · begonnen am 24. Apr 2007 · letzter Beitrag vom 24. Apr 2007
Antwort Antwort
DelphiManiac

Registriert seit: 5. Dez 2005
742 Beiträge
 
#1

Speicher für Pchar allokieren

  Alt 24. Apr 2007, 14:16
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
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Speicher für Pchar allokieren

  Alt 24. Apr 2007, 14:20
Mit Delphi-Referenz durchsuchenNew kriegst du Speicher, mit Delphi-Referenz durchsuchenDispose wirst du ihn wieder los.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
DelphiManiac

Registriert seit: 5. Dez 2005
742 Beiträge
 
#3

Re: Speicher für Pchar allokieren

  Alt 24. Apr 2007, 14:29
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....
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Speicher für Pchar allokieren

  Alt 24. Apr 2007, 14:38
Hallo,

Delphi-Referenz durchsuchenGetMem sollte hier besser funktionieren.

Achte aber darauf, dass die strings auch wieder freigegeben werden.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
DelphiManiac

Registriert seit: 5. Dez 2005
742 Beiträge
 
#5

Re: Speicher für Pchar allokieren

  Alt 24. Apr 2007, 15:38
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!
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#6

Re: Speicher für Pchar allokieren

  Alt 24. Apr 2007, 23:22
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
  Mit Zitat antworten Zitat
Antwort Antwort


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 08:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz