AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

[Delphi] ASM => applicationdata

Ein Thema von o0o · begonnen am 6. Mär 2008 · letzter Beitrag vom 7. Mär 2008
Antwort Antwort
Seite 3 von 3     123   
Benutzerbild von o0o
o0o

Registriert seit: 20. Jul 2007
Ort: am...,da wo die sonne nicht scheint!
166 Beiträge
 
Delphi 2007 Enterprise
 
#21

Re: [Delphi] ASM => applicationdata

  Alt 7. Mär 2008, 15:19
0_o omg klappt das echt??? xDDD

ich probiers mal scherzeshalber aus...hatte da garnicht dran gedacht^^

da o0o
(_/marabu-fan inside\_)
[-\_______________/-]
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#22

Re: [Delphi] ASM => applicationdata

  Alt 7. Mär 2008, 15:48
Zitat von Apollonius:
Wie willst du aus einer Funktion einen PChar zurückgeben, ohne Verwirrung zu stiften? Entweder du kopierst die Zeichenkette in einen vorgegebenen PChar (so machen es die WinAPIs) oder du gibst einen String zurück. Andernfalls muss der Nutzer nämlich raten, ob er HeapFree, LocalFree, GlobalFree oder FreeMem nehmen muss, um aufzuräumen.
Und du kannst eine Menge optimieren, lokale Variablen rausschmeißen, kein cmp eax, 0 verwenden (sonder test eax, eax)...
Würde mich mal interessieren wie man das jetzt optimiert. Codebeispiel erwünscht Mache normal nichts mit inline Assembler .. wenn dann richtig MASM32.
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#23

Re: [Delphi] ASM => applicationdata

  Alt 7. Mär 2008, 16:53
Weil du es bist:
Delphi-Quellcode:
function GetShellFolder(CSIDL: Integer): PChar;
asm
  push eax //das ist die Variable PIDL
  push esp
  push eax
  push 0
  call SHGetSpecialFolderLocation
  test eax, eax
  jnz @@ExitProc
  push MAX_PATH
  push GMEM_FIXED
  call GlobalAlloc
  pop edx
  push eax
  push eax
  push edx
  call SHGetPathFromIDList
  pop eax
  @@ExitProc:
end;
Allgemein ist test Register, Register besser als cmp Register, 0, da es in 2 statt 3 Bytes codiert wird. Außerdem ist bei GMEM_FIXED bzw. GPTR kein GlobalLock notwendig.
Des Weiteren führt der Code (auch meiner) zu einem Speicherleck: PIDL soll man laut MSDN mit dem IMalloc der Shell freigeben.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#24

Re: [Delphi] ASM => applicationdata

  Alt 7. Mär 2008, 17:03
um sich die Arbeit zu ersparen kann man anstelle von SHGetSpecialFolderLocation auch SHGetSpecialFolderPath verwenden.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#25

Re: [Delphi] ASM => applicationdata

  Alt 7. Mär 2008, 17:26
Oki Danke dir Apollonius Was ich noch nicht verstehe ist wo du Result setzt und wo du CLSID ausließt. Werden die Werte automatisch in die von dir verwendeten Register geschrieben?
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#26

Re: [Delphi] ASM => applicationdata

  Alt 7. Mär 2008, 17:28
Aufrufkonvention Register -> erster Parameter in EAX, zweiter in EDX, dritter in ECX, weitere auf dem Stack, außerdem wird bei allen Aufrufkonventionen außer Safecall der Rückgabewert in EAX gespeichert.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 23:17 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