Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   DLL mit Rio erstellt + in D2006 nutzen (https://www.delphipraxis.net/200326-dll-mit-rio-erstellt-d2006-nutzen.html)

TigerLilly 9. Apr 2019 20:23

Delphi-Version: 5

DLL mit Rio erstellt + in D2006 nutzen
 
Danke für Eure Erfahrungen + Infos:

Ich möchte mit Rio eine DLL schreiben, die ich aus D2006 aufrufe. Da ich Strings übergebe - muss ich da Unicode-mäßig auf irgendwas aufpassen?
D2006 benutzt ja ANSI-Strings + in Rio sind Strings Unicode.

Danke für jede Info.

hoika 9. Apr 2019 20:43

AW: DLL mit Rio erstellt + in D2006 nutzen
 
Hallo,
ich würde direkt UnicodeString benutzen.
Das sollt passen.

Lemmy 9. Apr 2019 21:18

AW: DLL mit Rio erstellt + in D2006 nutzen
 
Ich nutze XE4 und XE10 für div. DLLs die ich aus dem Hauptprogramm (D7 - das ohne XE) verwende und nutze für die Strings WideString, dann spare ich mir das Gedöns mit der BorlandmM.dll

TigerLilly 10. Apr 2019 06:36

AW: DLL mit Rio erstellt + in D2006 nutzen
 
Also in D7:

var X : String;
Y : WideString; bzw UnicodeString;

X nach Y konvertieren + an die DLL übergeben.

DLL in Rio:

var A : String;

und A aus dem aufrufenden Programm übernehmen?

hoika 10. Apr 2019 06:44

AW: DLL mit Rio erstellt + in D2006 nutzen
 
Hallo,
nein, benutze überall den gleichen Datentyp.
Also entweder WideString oder UnicodeString.

Auch wenn String=WideString in D>=2009.
Das macht das Lesen übersichtlicher.

Ich würde es sogar so machen:

D7
S: String;
WS: WideString;

S:= 'bla';
WS:= S; // sollte passen, oder halt wirklich konvertieren

D-Rio
S: String;
WS: WideString;

WS:= <- aus Dll
S:= WS;

DeddyH 10. Apr 2019 07:00

AW: DLL mit Rio erstellt + in D2006 nutzen
 
Oder man macht es wie MS und schreibt die Funktionen in beiden Varianten. In der DLL:
Delphi-Quellcode:
function MyFuncA(SomeParam: PAnsiChar): DWORD; stdcall;
function MyFuncW(SomeParam: PWideChar): DWORD; stdcall;

exports
  MyFuncA,
  MyFuncW;
Auf Programmseite schreibt man sich dann eine Importunit, die die zur Delphi-Version passende Funktion lädt:
Delphi-Quellcode:
// Import der zum Delphi passenden Version
function MyFunc(SomeParam: PChar): DWORD; stdcall; external 'MyDLL.dll' name {$IFDEF UNICODE} 'MyFuncW' {$ELSE} 'MyFuncA' {$ENDIF};
Zu beachten: hier muss dann aber auch zwingend der Typalias PChar verwendet werden, sonst ist das alles für die Füße.

TiGü 10. Apr 2019 08:36

AW: DLL mit Rio erstellt + in D2006 nutzen
 
Zitat:

Zitat von hoika (Beitrag 1429941)
Auch wenn String=WideString in D>=2009.

Nein, das stimmt so nicht.
Sie sind zwar zuweisungskompatibel, aber unterschiedlich implementiert.
http://docwiki.embarcadero.com/RADSt...Typen_(Delphi)

peterbelow 10. Apr 2019 10:15

AW: DLL mit Rio erstellt + in D2006 nutzen
 
Zitat:

Zitat von TigerLilly (Beitrag 1429929)
Danke für Eure Erfahrungen + Infos:

Ich möchte mit Rio eine DLL schreiben, die ich aus D2006 aufrufe. Da ich Strings übergebe - muss ich da Unicode-mäßig auf irgendwas aufpassen?
D2006 benutzt ja ANSI-Strings + in Rio sind Strings Unicode.

Danke für jede Info.

Verwende in Funktionen, die von der DLL exportiert werden, ausschließlich Datentypen, die API- oder COM-kompatibel sind! Das ist die einzig sichere Methode, wenn Programm und DLL mit unterschiedlichen Delphi-Versionen gebaut werden. Für Text wäre daher Widestring als Parametertyp geeignet (das ist ein COM BSTR unter der Haube), oder halt PAnsiChar oder PWidechar(explizit, nicht einfach PChar!). Intern können die beiden Module den String-Typ verwenden; die notwendige Konvertierung ANSI <-> Unicode macht die RTL automatisch, wo notwendig. Nur für einen als Var oder out deklarierten Widestring-Parameter müßte das aufrufende Programm eine Variable vom Typ Widestring verwenden.

TigerLilly 10. Apr 2019 13:40

AW: DLL mit Rio erstellt + in D2006 nutzen
 
Danke erst mal für die Infos!


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:12 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