![]() |
Konvertierung nach D2009
Zitat:
Wie ist die richtige umsetzung ? Hab gesucht nur einen Eintrag gefunden. gruss Emil |
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
Dieses Thema wurde von "MrSpock" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Ist eine Delphi Frage. |
Re: Konvertierung nach D2009
Zitat:
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:
kein problem in erster Zeile
MediaTitle: string
in der zweiten kommt die benannte Warnung. noch eins.
Delphi-Quellcode:
Dann kommt die Meldung in unterer Zeile nicht mehr
MediaTitle: AnsiString;
aber in der ersten dann Zitat:
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 |
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: |
Re: Konvertierung nach D2009
|
Re: Konvertierung nach D2009
Zitat:
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 |
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 |
Re: Konvertierung nach D2009
Zitat:
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 |
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 |
Re: Konvertierung nach D2009
Zitat:
Zitat:
Nur mal so zum Vergleich. Folgender Code kompiliert in Delphi 2007 und Delphi 2009:
Delphi-Quellcode:
Delphi 2007:
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;
Code:
Delphi 2009:
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
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. |
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