Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Konvertierung nach D2009 (https://www.delphipraxis.net/133093-konvertierung-nach-d2009.html)

EWeiss 25. Apr 2009 12:06


Konvertierung nach D2009
 
Zitat:

[DCC Warnung] Unit1.pas(505): W1044 Bedenkliche Typumwandlung von string in PAnsiChar
PAnsiChar(PluginDir + PluginList.Items[IndexNum]));

Wie ist die richtige umsetzung ?
Hab gesucht nur einen Eintrag gefunden.

gruss Emil

Bernhard Geyer 25. Apr 2009 13:38

Re: Konvertierung nach D2009
 
Wie wäre es damit?
Delphi-Quellcode:
var
  MyAnsiStr: AnsiString;
begin
  MyAnsiStr := PluginDir + PluginList.Items[IndexNum];
  PAnsiChar(MyAnsiStr);
end;

DP-Maintenance 25. Apr 2009 13:45

DP-Maintenance
 
Dieses Thema wurde von "MrSpock" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Ist eine Delphi Frage.

EWeiss 25. Apr 2009 14:12

Re: Konvertierung nach D2009
 
Zitat:

Zitat von Bernhard Geyer
Wie wäre es damit?
Delphi-Quellcode:
var
  MyAnsiStr: AnsiString;
begin
  MyAnsiStr := PluginDir + PluginList.Items[IndexNum];
  PAnsiChar(MyAnsiStr);
end;

Da haben die was angefangen.
Da kommt eine warnung auf die andere

anderes Beispiel.
Delphi-Quellcode:
MediaTitle := ExtractFileName(AnsiLeftStr(PlaylistFile, Length(PlaylistFile) - 4));
BASSVIS_SetPlayState(@mVisParam, psSetPlaylistTitle, -1, PAnsiChar(MediaTitle));
Delphi-Quellcode:
MediaTitle: string
kein problem in erster Zeile
in der zweiten kommt die benannte Warnung.

noch eins.
Delphi-Quellcode:
MediaTitle: AnsiString;
Dann kommt die Meldung in unterer Zeile nicht mehr
aber in der ersten dann
Zitat:

[DCC Warnung] Unit1.pas(284): W1058 Implizite String-Umwandlung mit potenziellem Datenverlust von 'string' zu 'AnsiString'
Ein Durcheinander ohne gleichen. :wall:
Da geht 80% der zeit an der konvertierung drauf und dann find mal das richtige.
Letztendlich weiss man nicht wie man die variable deklarieren soll da
man immer damit rechnen muss das irgendwas nicht zusammen paßt.

In dem Fall würde deine umwandlung nichts bringen.
Im ersten Beitrag schon.

gruss Emil

semo 25. Apr 2009 15:09

Re: Konvertierung nach D2009
 
einige (nicht wenige) menschen sind froh über die neuerungen und unicode unterstützung.
du müsstest dich halt mal ein wenig einlesen und nicht nur meckern :warn:

Bernhard Geyer 25. Apr 2009 15:27

Re: Konvertierung nach D2009
 
Was zum Lesen:
Delphi in a Unicode World Part I
Delphi in a Unicode World Part II
TDelphi in a Unicode World Part III

EWeiss 25. Apr 2009 16:53

Re: Konvertierung nach D2009
 
Zitat:

Zitat von M. Hassmann
einige (nicht wenige) menschen sind froh über die neuerungen und unicode unterstützung.
du müsstest dich halt mal ein wenig einlesen und nicht nur meckern :warn:

Was hat das mit meckern zu tun ?
Die Wahrheit soll man nicht verschweigen.

Hast du mal die dglOpenGl geöffnet ?
Da sind mal leicht mehr als 350 Warnungen vom gleichen Typ
Wenn man das alles von Hand korrigieren muss dann darf man auch getrost mal meckern.

Man soll mal nicht alles schön reden nicht wahr ?
In diesen Sinne..

@Bernhard Geyer
Danke für die Links wird bestimmt einiges Informativ von sein.

gruss Emil

Warp 25. Apr 2009 17:07

Re: Konvertierung nach D2009
 
Mal rein aus Neugier ;-)

Was veranlasst Dich denn, D2009 für dieses Projekt einzusetzen? Könntest Du nicht einfach bei einer Delphi-Version < 2009 bleiben - dann sparst Du dir die ganze Umsetzerei und den damit verbundenen Aufwand (und Ärger). D2009 setze ich bspw. nur für Dinge ein, in denen ich unbedingt Unicode brauche bzw. in denen ich Bibliotheken habe, die bereits auf D2009 angepasst sind.

Gruss

Warp

EWeiss 25. Apr 2009 17:49

Re: Konvertierung nach D2009
 
Zitat:

Zitat von Warp
Mal rein aus Neugier ;-)

Was veranlasst Dich denn, D2009 für dieses Projekt einzusetzen? Könntest Du nicht einfach bei einer Delphi-Version < 2009 bleiben - dann sparst Du dir die ganze Umsetzerei und den damit verbundenen Aufwand (und Ärger). D2009 setze ich bspw. nur für Dinge ein, in denen ich unbedingt Unicode brauche bzw. in denen ich Bibliotheken habe, die bereits auf D2009 angepasst sind.

Gruss

Warp

Ja stimmt schon.
Aber!
Bevor ich ein BS kaufe dann teste ich es vorher und ich denke es hat nichts mit meckern zu tun wenn man
dann seine Meinung darüber kundtut.
Auf der anderen seite möchte ich dann nicht 3 verschiedene Versionen auf der platte haben
wenn man schon soviel Geld dafür ausgibt.

Zu meinen Projekt.
Das muss ich wohl oder übel irgendwann auf Unicode umschreiben.
Ob ich mich jetzt oder später darüber ärgere ist ne andere sache ;)

gruss Emil

EWeiss 26. Apr 2009 12:54

Re: Konvertierung nach D2009
 
So habs jetzt geschafft das alle 1000x Warnungen konvertiert sind und hab wieder eine saubere LIB.
Habe aber noch ne frage bezüglich Released und Debug.

Sehe keinen großen unterschied die DLL ist genauso groß egal welche variante ich erstelle.
Eigentlich sollte doch die Released kleiner sein oder ?

Das Unicode zeuch addiert mir mal locker 100KB mehr in die DLL.

gruss Emil

jbg 26. Apr 2009 14:47

Re: Konvertierung nach D2009
 
Zitat:

Zitat von EWeiss
Sehe keinen großen unterschied die DLL ist genauso groß egal welche variante ich erstelle.
Eigentlich sollte doch die Released kleiner sein oder ?

Die Debuginfos stehen in den DCU Dateien. Und auch bei "Debug" wird mit aktivierter Code-Optimierung gearbeitet. Das Ergebnis der Kompilierung ist als genau das selbe für die Ausgabedatei, unterscheidet sich aber in den Zwischendateien (*.dcu, *.dcp).


Zitat:

Das Unicode zeuch addiert mir mal locker 100KB mehr in die DLL.
Was kein Wunder ist, wenn aus einem simplen 13 Bytes großen "Length(String)" in Delphi 2007 sage und schreibe 40 Bytes werden.

Nur mal so zum Vergleich. Folgender Code kompiliert in Delphi 2007 und Delphi 2009:
Delphi-Quellcode:
function InStr(const S: string; Ch: Char): Integer;
begin
  for Result := 1 to Length(S) do
    if S[Result] = Ch then
      Exit;
  Result := 0;
end;
Delphi 2007:
Code:
Unit1.pas.70: begin
004A78DC 56               push esi
Unit1.pas.71: for Result := 1 to Length(S) do
004A78DD 8BC8             mov ecx,eax
004A78DF 85C9             test ecx,ecx
004A78E1 7405             jz $004a78e8
004A78E3 83E904           sub ecx,$04
004A78E6 8B09             mov ecx,[ecx]
004A78E8 85C9             test ecx,ecx
004A78EA 7E0F            jle $004a78fb
004A78EC BE01000000       mov esi,$00000001
Unit1.pas.72: if S[Result] = Ch then
004A78F1 3A5430FF        cmp dl,[eax+esi-$01]
004A78F5 7406             jz $004a78fd
Unit1.pas.73: Exit;
004A78F7 46               inc esi
Unit1.pas.71: for Result := 1 to Length(S) do
004A78F8 49               dec ecx
004A78F9 75F6             jnz $004a78f1
Unit1.pas.74: Result := 0;
004A78FB 33F6             xor esi,esi
Unit1.pas.75: end;
004A78FD 8BC6             mov eax,esi
004A78FF 5E              pop esi
004A7900 C3               ret
Delphi 2009:
Code:
Unit1.pas.105: begin
00461E24 55               push ebp
00461E25 8BEC            mov ebp,esp
00461E27 51               push ecx
00461E28 53               push ebx
00461E29 56               push esi
00461E2A 57               push edi
00461E2B 8BFA            mov edi,edx
00461E2D 8945FC          mov [ebp-$04],eax
00461E30 8B45FC          mov eax,[ebp-$04]
00461E33 E8B035FAFF      call @UStrAddRef
00461E38 33C0             xor eax,eax
00461E3A 55               push ebp
00461E3B 68B71E4600       push $00461eb7
00461E40 64FF30           push dword ptr fs:[eax]
00461E43 648920           mov fs:[eax],esp
Unit1.pas.106: for Result := 1 to Length(S) do
00461E46 8B45FC          mov eax,[ebp-$04]
00461E49 85C0             test eax,eax
00461E4B 7416             jz $00461e63
00461E4D 8BD0             mov edx,eax
00461E4F 83EA0A          sub edx,$0a
00461E52 66833A02         cmp word ptr [edx],$02
00461E56 740B            jz $00461e63
00461E58 8D45FC          lea eax,[ebp-$04]
00461E5B 8B55FC          mov edx,[ebp-$04]
00461E5E E8A12FFAFF      call @InternalUStrFromLStr
00461E63 85C0             test eax,eax
00461E65 7405             jz $00461e6c
00461E67 83E804           sub eax,$04
00461E6A 8B00             mov eax,[eax]
00461E6C 8BD8             mov ebx,eax
00461E6E 85DB            test ebx,ebx
00461E70 7E2D            jle $00461e9f
00461E72 BE01000000       mov esi,$00000001
Unit1.pas.107: if S[Result] = Ch then
00461E77 8B45FC          mov eax,[ebp-$04]
00461E7A 85C0             test eax,eax
00461E7C 7416             jz $00461e94
00461E7E 8BD0             mov edx,eax
00461E80 83EA0A          sub edx,$0a
00461E83 66833A02         cmp word ptr [edx],$02
00461E87 740B            jz $00461e94
00461E89 8D45FC          lea eax,[ebp-$04]
00461E8C 8B55FC          mov edx,[ebp-$04]
00461E8F E8702FFAFF      call @InternalUStrFromLStr
00461E94 663B7C70FE      cmp di,[eax+esi*2-$02]
00461E99 7406             jz $00461ea1
Unit1.pas.108: Exit;
00461E9B 46               inc esi
Unit1.pas.106: for Result := 1 to Length(S) do
00461E9C 4B              dec ebx
00461E9D 75D8             jnz $00461e77
Unit1.pas.109: Result := 0;
00461E9F 33F6             xor esi,esi
Unit1.pas.110: end;
00461EA1 33C0             xor eax,eax
00461EA3 5A              pop edx
00461EA4 59               pop ecx
00461EA5 59               pop ecx
00461EA6 648910           mov fs:[eax],edx
00461EA9 68BE1E4600       push $00461ebe
00461EAE 8D45FC          lea eax,[ebp-$04]
00461EB1 E83A35FAFF      call @UStrClr
00461EB6 C3               ret
00461EB7 E9FC24FAFF      jmp @HandleFinally
00461EBC EBF0             jmp $00461eae
00461EBE 8BC6             mov eax,esi
00461EC0 5F              pop edi
00461EC1 5E              pop esi
00461EC2 5B              pop ebx
00461EC3 59               pop ecx
00461EC4 5D              pop ebp
00461EC5 C3               ret

Mir wird bei Delphi 2009 immer übel, wenn ich die CPU Anzeige aufmache. Das "const" für Strings hat seine Bedeutung verloren. Um das ganze zu umgehen, habe ich mittlerweile die Compiler-Option {$STRINGCHECKS ON/OFF} auf OFF gestellt. Meine EXE-Dateien müssen nicht mit alten, noch AnsiString nutzenden C++Builder Modulen kommunizieren. Leider ist die RTL und VCL mit {$STRINGCHECKS ON} kompiliert, was das Ganze so oder so aufbläht und stark verlangsamt.

EWeiss 26. Apr 2009 16:45

Re: Konvertierung nach D2009
 
Ist interessant das ganze mal aus anderer perspektive zu betrachten.

Na bedingt durch das Unicode zeuch hab ich noch mit ganz anderen dingen zu kämpfen
Unter VB ist es jetzt nicht mehr so einfach die DLL zu nutzen.

gruss Emil


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:35 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz