AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Delphi DLL String übergeben
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi DLL String übergeben

Ein Thema von DelTurbo · begonnen am 25. Mär 2024 · letzter Beitrag vom 28. Mär 2024
Antwort Antwort
Seite 1 von 3  1 23      
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.212 Beiträge
 
Delphi 2007 Architect
 
#1

Delphi DLL String übergeben

  Alt 25. Mär 2024, 14:31
Hi,
ich habe folgendes Problem. Ein bekannter hat mir unter Delphi 10.4 eine DLL übersetzt weil es nicht unter Delphi 2007 ging. Er hat auch ein kleines Test Programm gemacht damit ich sehe das alles läuft.

Nun komme ich mit meinem Delphi 2007 daher. Die DLL laden usw. klappt alles. Nun versuche ich seit Samstag einen String zu übergeben. In der DLL ist die function so hinterlegt.
function ConnectApi(Key:PChar):Boolean; cdecl;
Egal wie ich es übergebe in der DLL kommt nur "Müll" an. Nicht der String. Wie gehe ich nun am besten vor? Ich habe auch per TV zugriff auf sein Delphi und könnte die Functions Parameter ändern. Was ich auch schon gemacht habe. Aber es passt nix. In 20 Stunden kann man viele (auch blöde) Sachen probieren. Aber ich bekomme es nicht hin.

Ich hoffe es weiß jemand ob das überhaupt geht, also DLL mit 10.4 und Programm mir 2007. Und wenn ja, wie?

Vielen Dank im voraus

PS.: Nehme ich mein Testprogramm (in Delphi 2007 geschrieben) und übersetze es mit 10.4 dann läuft immer alles. Egal wie Doof/unlogisch die Parameter sind.
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
Papaschlumpf73

Registriert seit: 3. Mär 2014
Ort: Berlin
435 Beiträge
 
Delphi 12 Athens
 
#2

AW: Delphi DLL String übergeben

  Alt 25. Mär 2024, 14:40
In Delphi 2007 war PChar noch nicht Unicode. In Delphi 10.4. jedoch schon. Liegt wahrscheinlich daran... Besser wäre wohl, ihr würdet einen WideString-Parameter benutzen; der ist in allen Versionen gleich.
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.212 Beiträge
 
Delphi 2007 Architect
 
#3

AW: Delphi DLL String übergeben

  Alt 25. Mär 2024, 14:42
Und da kann man gar nichts machen?
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
Papaschlumpf73

Registriert seit: 3. Mär 2014
Ort: Berlin
435 Beiträge
 
Delphi 12 Athens
 
#4

AW: Delphi DLL String übergeben

  Alt 25. Mär 2024, 14:43
Du könntest ggf. einen PWideChar statt PChar übergeben; das könnte vielleicht klappen.
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
647 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Delphi DLL String übergeben

  Alt 25. Mär 2024, 14:48
Das Problem wird sein, dass D2007 (ANSI) und D10.4 (Unicode) nicht die gleiche Definition von PChar haben. Früher zeigte ein PChar auf ein Byte (Zeichen) und seit D2009 auf 2 Bytes = 1 Zeichen. Du musst deshalb sicherstellen, dass beide Delphis die Daten auf die gleiche Weise verarbeiten, also Ansi oder Unicode.

Deklariere mal in D10.4 die DLL Funktion so:

function ConnectApi(Key: PAnsiChar):Boolean; cdecl;

Die Routine in 10.4 muss dann den String entsrechend verarbeiten und als AnsiString übergeben.

Wenn du das umgekehrte machen willst, muss du in D2007 einen WideString als PWideChar übergeben. Das müsste auch gehen. Die Deklaration in D2007 müsste dann so sein:

function ConnectApi(Key: PWideChar):Boolean; cdecl;

Beispiel D2007:
Delphi-Quellcode:
var
  s: WideString;
begin
  s := 'mein key';
  ConnectApi(PWideChar(s));
end;
oder so:
Delphi-Quellcode:
var
  s: String;
begin
  s := 'mein key';
  ConnectApi(PWideChar(WideString(s)));
end;

Geändert von Rolf Frei (25. Mär 2024 um 14:56 Uhr)
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.212 Beiträge
 
Delphi 2007 Architect
 
#6

AW: Delphi DLL String übergeben

  Alt 25. Mär 2024, 14:53
Könnte ich auch PAnsiString nehmen? Weil ich ja einen langen String übergeben muss.

Das hat sich überschnitten... Sorry
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.212 Beiträge
 
Delphi 2007 Architect
 
#7

AW: Delphi DLL String übergeben

  Alt 25. Mär 2024, 15:01
Das geht. Ich brech ab. WideChar/String ist doch länger als 255, oder? Ich meine der wäre 0 Terminiert.
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
647 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Delphi DLL String übergeben

  Alt 25. Mär 2024, 15:07
Zuerst müssen wir wissen, wie es denn nun genau gemacht wird. Bleibt die Deklaration in D1.04 so mit PChar?

function ConnectApi(Key:PChar):Boolean; cdecl; Wenn dem so ist, kannst du es so machen wie in meinem vorherigen Beispiel. Du benötigst für D2007 eine andere Deklaration als in D10.4:
Delphi-Quellcode:
{$IFDEF UNICODE}  // D2009+
function ConnectApi(Key:PChar):Boolean; cdecl
{$ELSE}  // D2007
function ConnectApi(Key:PWideChar):Boolean; cdecl
{$ENDIF}

Zitat:
Könnte ich auch PAnsiString nehmen? Weil ich ja einen langen String übergeben muss.
Das versthe ich nicht so ganz, was du damit meinst? Die länge des String ist im Prinzip egal. PAnsiString würde ich auf keinen Fall nehmen, weil String in D2007 nicht einem String in D10.4 entspricht und das inkompatibel ist.

Geändert von Rolf Frei (25. Mär 2024 um 15:09 Uhr)
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
647 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Delphi DLL String übergeben

  Alt 25. Mär 2024, 15:08
Das geht. Ich brech ab. WideChar/String ist doch länger als 255, oder? Ich meine der wäre 0 Terminiert.
Nur der Datentyp ShotString besteht aus maximal 255 Zeichen, alles andere ist unlimitiert.
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.212 Beiträge
 
Delphi 2007 Architect
 
#10

AW: Delphi DLL String übergeben

  Alt 25. Mär 2024, 15:11
Hi,
erstmal danke für deine Hilfe. Ich habe die DLL schon geändert in
function ConnectApi(Key : PWideChar):Boolean; cdecl;

Klappt einwandfrei. Das mit dem Ansi vergiss wieder. Wenn man soooo lange dran sitzt und keinen erfolg hat, dann kommen auch komische Fragen...
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 07:56 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