Autor |
Beitrag |
reimo
      
Beiträge: 75
|
Verfasst: Do 16.12.04 10:15
Hi,
habe folgendes Problem: ich möchte vom Hauptthread eine Message zum Subthread schicken in welcher als Parameter ein String übergeben wird, ich bekomms einfach nicht hin!
Bei den API-Funktionen (SendMessage, PostThreadMessage ) können nur Integer-Werte übergeben werden, wie kann ich aber einen String übertragen.
Ich könnte es zwar über ein shared-memory machen, aber lieber wäre mir eine andere variante, kann mir jemand weiterhelfen?
mfg
reimo
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Do 16.12.04 10:23
Versuch mal die Übegabe als PChar gecastet zu Integer.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
reimo 
      
Beiträge: 75
|
Verfasst: Do 16.12.04 11:35
Hi,
danke für die Antwort, es funktioniert, aber es ist auch eine Art von Shared-Memory, da über das Carsten des PCHAR auf Integer die Addresse des Strings verschickt wird und nicht der eigentliche String, aber diese möglichkeit gefällt mir besser als selbst ein globales shred-memory anzulengen.
Jetzt hätte ich noch eine Frage zum PCHAR:
wird der Speicher für eine Variable dieses Typs automatisch angelegt, oder muss ich mich darum kümmern
und was geschieht in diesem Fall:
Delphi-Quelltext 1: 2: 3: 4: 5:
| test: PCHAR;
test := '324234'; test := '1'; test := 'dsgds'; |
wird hier für jede Zuweisung Speicher neu angelegt und es entstehen speicherlecks?
was geschieht, mit dem Speicher einer LOKALEN Varaible vom Typ PCHAR wenn die ihre Funktion verlassen wird ?
Danke
mfg,
reimo
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Do 16.12.04 13:01
Normalerweise kümmert sich Delphi bei Zuweisungen selber um die Speicherzuweisung. Eine Ausnahme ist aber, wenn du Puffer iner bestimmten Größe anlegen willst ODER eine Zuweisung PChar --> PChar machst. In diesen Fällen musst du dich selber um die Freigabe kümmern.
Aber da ich meist nur mit PChar-Puffern arbeite, bin ich mir da jetzt net ganz sicher ... Evtl. sollten sich Informationen dazu auch in der DOH noch finden lassen.
Aber wenn du einfach eine String-Konstante zuweist, wird vom Programm selber überhaupt kein Speicher reserviert, da einfach nur ein Zeiger auf die entsprechende Stelle gelegt wird.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
reimo 
      
Beiträge: 75
|
Verfasst: Do 16.12.04 15:08
hi
hab mich etwas mit den Pchars und mehreren threads, die über pchar auf gleichen speicherbereich zugreifen gespielt und hab beschlossen mich selbst um die speicherverwaltung zu kümmern (AllocMem,...)!
es erscheint mir in manchen fällen nicht ganz logisch wie sich delphi verhält, oder anders gesagt ich kapiers nicht!
irgendwie erschien mir der umstieg von pascal auf C/C++ einfacher als jetzt der umstieg von C/C+ auf delphi!!
danke
mfg
reimo
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Do 16.12.04 21:20
Dann will ich dich mal glücklich machen:
Delphi kennt auch die lstr*- und str*-Funktionen von C++. Die verhalten sich auch genauso ...
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
|