Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi mIRC-Bibliothek auf Unicode umstellen - ein hartes Unterfangen (https://www.delphipraxis.net/188451-mirc-bibliothek-auf-unicode-umstellen-ein-hartes-unterfangen.html)

warschonweg 4. Mär 2016 20:25

Delphi-Version: 10 Seattle

mIRC-Bibliothek auf Unicode umstellen - ein hartes Unterfangen
 
So.

Ich habe die undankbare Aufgabe, eine uralte DLL, die in Delphi 6 für eine Vor-Unicode-Version von mIRC geschrieben wurde, auf den neuesten Stand zu bringen. Es kommt also überall, wo bisher PChars und strings verwendet wurden, plötzlich so was wie Unicode rein und so was wie Unicode raus.

Dabei scheitere ich schon an der einfachen Aufgabe, eine Methode, die einfach nur 'ne Messagebox anzeigt, sinnvoll zu konvertieren:

Code:
function messageok( mWnd: hWnd; aWnd: hWnd; Data: PChar; Parms: PChar; Show: Boolean; NoPause: Boolean ): Integer; export; stdcall;
begin
  MessageBoxA(mWnd, PAnsiChar(AnsiString(Data)), 'Message', MB_OK);
  MessageBoxA(mWnd, PAnsiChar(Utf8Decode(Data)), 'Message', MB_OK);
  MessageBoxW(mWnd, PWideChar(UnicodeString(Data)), 'Message', MB_OK);
  MessageBoxW(mWnd, PWideChar(Utf8Encode(Data)), 'Message', MB_OK);
  result := 1;
end;
Wenn ich von mIRC aus "ÄäÖöÜüß" reinschicke, kommt bei allen vier was anderes raus - wahlweise Fragezeichen oder chinesische Schriftzeichen. Irgendwie stehe ich auf dem Schlauch - kann mich wer in die richtige Richtung schubsen?

hoika 4. Mär 2016 20:54

AW: mIRC-Bibliothek auf Unicode umstellen - ein hartes Unterfangen
 
Hallo,
wenn das eine Vor-Unicode-Version von mIRC ist:

Delphi-Quellcode:
function messageok( mWnd: hWnd; aWnd: hWnd; Data: PAnsiChar; Parms: PAnsiChar; Show: Boolean; NoPause: Boolean ): Integer; export; stdcall;


mIRC liefert das doch also PAnsiChar oder nicht ?

Heiko

warschonweg 4. Mär 2016 21:09

AW: mIRC-Bibliothek auf Unicode umstellen - ein hartes Unterfangen
 
Nein, es geht ja gerade darum, dass das alte Nicht-Unicode-Projekt aus einer Vor-Unicode-mIRC-Version auch in einem aktuellen mIRC und Delphi 10 funktioniert - ich hab' es hier also mit Unicode zu tun.

Glaube ich. :shock:

warschonweg 4. Mär 2016 21:42

AW: mIRC-Bibliothek auf Unicode umstellen - ein hartes Unterfangen
 
Was bedauerlicherweise funktioniert, ist:

Code:
function messageok( mWnd: hWnd; aWnd: hWnd; Data: PAnsiChar; Parms: PChar; Show: Boolean; NoPause: Boolean ): Integer; export; stdcall;
begin
  MessageBoxW(mWnd, PWideChar(UnicodeString(Utf8Decode(Data))), 'Message', MB_OK);
end;
Aber irgendwie beschleicht mich das Gefühl, dass ich da zu viel konvertiere. :?

hoika 4. Mär 2016 21:59

AW: mIRC-Bibliothek auf Unicode umstellen - ein hartes Unterfangen
 
Hallo,
also du musst dich doch schon an die Konvention vom mIRC halten.

WideChar(UnicodeString(Utf8Decode(Data)))

Sowas auf jeden Fall über lokale Variablen testen.


Heiko

warschonweg 4. Mär 2016 22:02

AW: mIRC-Bibliothek auf Unicode umstellen - ein hartes Unterfangen
 
Das ist ein bisschen Stochern im Nebel, die mIRC-Konvention ist kein Open Source... :?

Luckie 4. Mär 2016 22:03

AW: mIRC-Bibliothek auf Unicode umstellen - ein hartes Unterfangen
 
Unter Unicode Delphi entspricht ein PChar dem alten PWidechar. Also einfach aus dem PAnsiChar ein PChar machen. Also denke ich jetzt mal so. Delphi sollte dann von sich aus dafür sorgen, dass MessageboxW aufgerufen wird.

warschonweg 4. Mär 2016 22:05

AW: mIRC-Bibliothek auf Unicode umstellen - ein hartes Unterfangen
 
Mit PChar ging es nicht so recht, siehe #1. Daher hab' ich ja "so was wie Unicode" geschrieben. mIRC scheint da etwas eigen zu sein. Oder einfach nur anders.


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