AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Brauche Hilfe bei Übersetzung von c++-code nach Delphi...
Thema durchsuchen
Ansicht
Themen-Optionen

Brauche Hilfe bei Übersetzung von c++-code nach Delphi...

Ein Thema von bingo72 · begonnen am 21. Sep 2006 · letzter Beitrag vom 22. Sep 2006
Antwort Antwort
bingo72

Registriert seit: 18. Aug 2006
Ort: Österreich
180 Beiträge
 
Delphi 5 Professional
 
#1

Brauche Hilfe bei Übersetzung von c++-code nach Delphi...

  Alt 21. Sep 2006, 15:20
Hallo Experten!!

Ich sitze nun schon mehrere Tage an folgenden Code rum und komm einfach auf keinen grünen Zweig...
Ich bin echt nicht faul und auch nicht bequem mir den Code selbst zu übersetzen, wenn ich es könnte. Bitte um Hilfe, denn mir wäre damit sehr geholfen:

Code:
 if(file.Open(_T("C:\\Program Files\Windows Media
Components\Encoder\Profiles\myprofile.prx"),CFile::modeRead)!=0){ 
                        WCHAR* perfilXML=new WCHAR[file.GetLength()];
                        file.Read(perfilXML,file.GetLength());
                        file.Close();
Was ich bislang zusammengebracht habe war folgendes...

Delphi-Quellcode:
    fStream := TFileStream.Create(APATHTOFILE + 'profile.prx', fmOpenRead);
    s := '';
    SetLength(s, fStream.Size);
    fStream.Read(s, fStream.Size);
    fStream.Free;
Bitte um Kontrolle und Korrektur....

Danke!!

[edit=Phoenix] C-und Delphi-Code-Tags eingefügt. Das nächste mal bitte gleich selber dran denken. Mfg, Phoenix[/edit]
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Brauche Hilfe bei Übersetzung von c++-code nach Delphi..

  Alt 21. Sep 2006, 15:33
Hallo,

und wo ist jetzt das Problem ?
Ich würde eh überlegen,
direkt eine XML-Lesekomponente zu benutzen.
Das kommt aber auf den Verwendungszweck an.

Beim Überblättern fällt mir noch auf,
vielleicht statt Read(s) Read(@s) zu benutzen
aber mit Streams arbeite ich nicht.


Heiko
Heiko
  Mit Zitat antworten Zitat
bttb930

Registriert seit: 6. Okt 2003
372 Beiträge
 
#3

Re: Brauche Hilfe bei Übersetzung von c++-code nach Delphi..

  Alt 21. Sep 2006, 16:13
warum nicht einfach

Delphi-Quellcode:
  sl := TStringList.Create;
  sl.LoadFromFile('...filename...');
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#4

Re: Brauche Hilfe bei Übersetzung von c++-code nach Delphi..

  Alt 21. Sep 2006, 17:15
Hi,
es gibt ein paar Dinge, auf die du achten solltest. So kann ein XML File UTF-8 oder UTF-16 kodiert sein.
Der C Code verwendet WChar, das würde ich doch einfach mal ein Array von Widechars (16 Bit) deuten, so dass hier immer von UTF-16 augegangen wird. Der normale Delphi String ist aber eine AnsiString, du solltest hier also lieber einen Widestring verwenden. Dabei gilt es dann zu beachten, dass du pro Zeichen 2 Byte hast, der also nur Stream.Size div 2 groß wird.

Den String s brauchst du zudem nicht mit '' initialisieren, wenn du danach die Länge veränderst. Da wird (imho) der alte String dann eh verworfen und neuer Speicher alloziert (verworfen heißt nicht, dass der Inhalt nicht kopiert wird, aber du legst halt zwei mal Speicher an). Andererseits wird der Compiler das eh wegoptimieren (denke ich).

Was @s angeht, von dem Tipp würde ich dir abraten, da bekommst du nämlich die falsche Adresse. Wenn man Strings oder dyn. Arrays addressiert, dann sollte man immer den Index angeben. @s zeigt auf einen Teil, den du nicht beschreiben solltest.
@s[1] (Strings sind 1 indexiert) wäre dann eher korrekt. Ob man das bei Streams braucht oder nicht weiß ich gerade nicht (ich weiß dass ich hier schonmal den falschen Tipp gab und lasse ihn hier weg).

Ja, ansonsten sieht dass was du tust schon richtig aus. Allerdings gibt es da noch Potenzial etwas zu verbessern. Wenn du eine Datei zum Lesen öffnest, solltest du sie ruhig zum Schreiben sperren. Damit du lesen kannst musst du ein Handle auf die Datei bekommen (macht der Stream aut.). Damit solltest du aber auch dafür sorgen, dass der Stream auf jedem Fall (auch bei einem Fehler) freigegeben wird. Deshalb gehört da ein so genannter Ressourcen-Schutzblock hin.
Und damit andere deinen Code leichter lesen können, solltest du die Codetags verwenden (die findest du über dem Edit in dem du einen Beitrag tippst). Da gibt es sowohl für C als auch für Delphi Code Auszeichnungen. Werden die verwendet, ist der Code als solcher markiert (und es gibt auch Syntaxhighlighting).

Delphi-Quellcode:
fStream := TFileStream.Create(A_PATH_TO_FILE + 'profile.prx', fmOpenRead or fmShareDenyWrite);
try
  setLength(s, fStream.Size);

  if not fStream.Read(s, fStream.Size) = fStream.Size then
  begin
    // Achtung, es wurden weniger Zeichen gelesen als du vorgegeben hast
  end;
finally
  fStream.Free;
end;
So sähe das mit Schutzblock aus, der stellt halt sicher, dass die Datei auf jeden Fall wieder frei gegeben wird.

Gruß Der Unwissende
  Mit Zitat antworten Zitat
bingo72

Registriert seit: 18. Aug 2006
Ort: Österreich
180 Beiträge
 
Delphi 5 Professional
 
#5

Re: Brauche Hilfe bei Übersetzung von c++-code nach Delphi..

  Alt 22. Sep 2006, 06:38
Vielen Dank für Eure Unterstützung...

Dies ist jener Coder der mich zum Erfolg führte...

Delphi-Quellcode:
hr := WMCreateProfileManager(pWMProfileManager);
    with TFileStream.Create(APATHTOFILE + 'profile.prx', fmOpenRead)do begin
      Read(i, SizeOf(i));
      SetLength(s, i);
      Read(s[1], i);
      Free
    end;
    hr := pWMProfileManager.LoadProfileByData(PWideChar(s), pProfile);
    hr := pASFInterface.ConfigureFilterUsingProfile(pProfile);
[edit=Phoenix] Und auch hier hat das Code-Tag gefehlt. Mfg, Phoenix[/edit]
  Mit Zitat antworten Zitat
Antwort Antwort


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 02:18 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