Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - string in der dll addieren
ConnyCarl - Mo 04.08.03 22:02
Titel: string in der dll addieren
hallo leute,
ich möchte eine einfache function ausführen die zwei stings in einer dll zusammen setzen soll.
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| uses Sharemem, SysUtils;
function erg: string; begin result := str1 + str2; end; |
nach dem starten kommt die meldung
| Zitat: |
| Ungültige Zeigeroperation |
wenn ich die meldung mit ok beende kommt jedoch das richtige ergebnis raus. was mache ich falsch ???
danke conny
Moderiert von
Tino: Quote- & Delphi-Tags hinzugefügt.
Moderiert von
tommie-lie: Und die Tags auch aktiviert :mrgreen:
AndyB - Mo 04.08.03 23:21
Hast du im Hauptprogramm auch als aller erste unit in der .dpr Datei ShareMem hinzugefügt?
ConnyCarl - Di 05.08.03 07:33
Titel: hallo,
danke für deine hilfe, ich habe die 'ShareMem' jetzt auch in der unit eingefügt, lustig ist jetzt das die meldung nach dem programm schliessen kommt. was mache ich noch falsch ???
gruss conny
ConnyCarl - Di 05.08.03 08:12
hallo, ich konnte nicht lesen. ich hatte auch vergessen sharemem in das project einzubinden, jetzt läuft mein programm erst einmal so wie ich es möchte.
danke und gruss conny
tommie-lie - Di 05.08.03 14:12
Die Sharemem braucht aber eine DLL, die von Version zu Version unterschiedlich ist. Wenn du das Programm an andere weitergeben willst, musst du diese zusätzliche DLL also auch mitliefern.
Besser wäre es hier, du würdest PChars verwenden, die verursachen nämlich keine Fehlermeldungen, auch ohne Sharemem nicht.
Die Funktion würde dann so aussehen:
Delphi-Quelltext
1: 2: 3: 4:
| function erg: PChar; begin result := PChar(String(str1) + String(str2)); end; |
Vorsicht: Da ich im Moment mein System neu instlaliere und kein Delphi habe, ist das nur aus dem Kopf getippt und könnte auch syntaktisch falsch sein. Evtl also in anderen Variationen ausprobieren.
AndyB - Di 05.08.03 14:47
| tommie-lie hat folgendes geschrieben: |
| könnte auch syntaktisch falsch sein. |
Syntaktisch lässt sich das schon kompilieren, nur "logisch" ist es Unsinn, denn damit reservierst du wiederum Speicher für den String, der beim Funktionsende freigegeben wird.
Der Code müsste wennschon so aussehen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32:
| function erg(Buffer: PChar; MaxLen: Integer): Integer; var S: string; begin Result := Length(str1) + Length(str2); if Buffer <> nil then begin S := str1 + str2; StrLCopy(Buffer, PChar(S), MaxLen); end; end;
var Buffer: PChar; Len: Integer; S: string; begin Len := erg(nil, 0); if Len > 0 then begin Buffer := StrAlloc(Len + 1); try erg(Buffer, Len); SetString(S, Buffer, Len); finally StrDispose(Buffer); end; end; end; |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!