AGB  ·  Datenschutz  ·  Impressum  







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

performance c++ <> Delphi

Ein Thema von EWeiss · begonnen am 9. Aug 2017 · letzter Beitrag vom 15. Aug 2017
Antwort Antwort
Benutzerbild von Zacherl
Zacherl

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

AW: performance c++ <> Delphi

  Alt 10. Aug 2017, 15:43
Na ja seine Meinung ist halt das er schon sehr lange sich mit Callbacks beschäftigt
und MF das genauso machen würde deshalb will er stdcall nicht.
An deiner Stelle würde ich hier keinen Support mehr geben, da er sich zu 100% irgendwo den Stack zerschießt. Da ist es kein Wunder, dass überall komische Exceptions rumfliegen.

Sollte auch für ihn ganz einfach zu testen sein. Wenn Typedef und Funktion die gleiche Calling Convention besitzen, funktioniert alles wunderbar:
Code:
typedef void (__stdcall *TestFuncPtr)(const char*);

void __stdcall func(const char* text)
{
    puts(text);
}

int main()
{
    // Ohne das reinterpret_cast weigert sich mein VS sogar schon den Code zu kompilieren.
    // (Was auch das korrekte von mir erwartete Verhalten darstellt)
    // Bei gleichen Calling Conventions kann der Cast weggelassen werden.
    TestFuncPtr test = reinterpret_cast<TestFuncPtr>(&func);
    test("test");
    return 0;
}
Lässt er jetzt an einer der Stellen das stdcall weg oder ändert es zu cdecl , dann wird unmittelbar nach dem Ausführen von test der Stack corrupted (was mir mein VS im Debug Mode sogar auch ordnungsgemäß in einer Fehlermeldung mitteilt).
Es muss immer an beiden Stellen gleich sein. Die erste Stelle ist aber in deinem Fall deine Dll, weshalb du ihm die stdcall Convention vorgibst. Daran muss er sich halt halten. Ob er will oder nicht. Sonst kracht es.
Angehängte Grafiken
Dateityp: png ZmSHu.png (10,8 KB, 18x aufgerufen)
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#2

AW: performance c++ <> Delphi

  Alt 10. Aug 2017, 15:52
Do not argue with an idiot. He will drag you down to his level and beat you with experience.

Selten einen so treffenden Footer gesehen.
(Es soll allerdings auch bei der C-Fraktion ganz vernünftige Menschen geben.

Es muss immer an beiden Stellen gleich sein. Die erste Stelle ist aber in deinem Fall deine Dll, weshalb du ihm die stdcall Convention vorgibst. Daran muss er sich halt halten. Ob er will oder nicht. Sonst kracht es.
Dem ist nichts hinzu zu fügen.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: performance c++ <> Delphi

  Alt 10. Aug 2017, 15:53
Werde ihm das mal verklickern
Mit meinem perfekten Englisch (Ironie an/aus)

Danke.
Zitat:
An deiner Stelle würde ich hier keinen Support mehr geben, da er sich zu 100% irgendwo den Stack zerschießt. Da ist es kein Wunder, dass überall komische Exceptions rumfliegen.
Ja so wie mit dem Slider beim Event..

gruss

Geändert von EWeiss (10. Aug 2017 um 15:56 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: performance c++ <> Delphi

  Alt 10. Aug 2017, 16:36
Na ja seine Meinung ist halt das er schon sehr lange sich mit Callbacks beschäftigt
und MF das genauso machen würde deshalb will er stdcall nicht.
An deiner Stelle würde ich hier keinen Support mehr geben, da er sich zu 100% irgendwo den Stack zerschießt. Da ist es kein Wunder, dass überall komische Exceptions rumfliegen.

Sollte auch für ihn ganz einfach zu testen sein. Wenn Typedef und Funktion die gleiche Calling Convention besitzen, funktioniert alles wunderbar:
Code:
typedef void (__stdcall *TestFuncPtr)(const char*);

void __stdcall func(const char* text)
{
    puts(text);
}

int main()
{
    // Ohne das reinterpret_cast weigert sich mein VS sogar schon den Code zu kompilieren.
    // (Was auch das korrekte von mir erwartete Verhalten darstellt)
    // Bei gleichen Calling Conventions kann der Cast weggelassen werden.
    TestFuncPtr test = reinterpret_cast<TestFuncPtr>(&func);
    test("test");
    return 0;
}
Lässt er jetzt an einer der Stellen das stdcall weg oder ändert es zu cdecl , dann wird unmittelbar nach dem Ausführen von test der Stack corrupted (was mir mein VS im Debug Mode sogar auch ordnungsgemäß in einer Fehlermeldung mitteilt).
Es muss immer an beiden Stellen gleich sein. Die erste Stelle ist aber in deinem Fall deine Dll, weshalb du ihm die stdcall Convention vorgibst. Daran muss er sich halt halten. Ob er will oder nicht. Sonst kracht es.
Antwort!
Zitat:
That is perfectly valid for 32-bit, but i am working in 64-bit that is using only FASTCALLS
gruss
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

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

AW: performance c++ <> Delphi

  Alt 10. Aug 2017, 17:06
Zitat:
That is perfectly valid for 32-bit, but i am working in 64-bit that is using only FASTCALLS
Wenn er ausschließlich für 64-Bit kompiliert, dann hat er recht - dann macht es zumindest keinen Unterschied. Ist trotzdem kein guter Stil, weil er so immer alles ändern muss, falls er doch mal für eine andere Plattform builden will.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: performance c++ <> Delphi

  Alt 10. Aug 2017, 17:11
Zitat:
falls er doch mal für eine andere Plattform builden will.
NA ja egal will er nicht..
Interessiert sich nicht mehr für 32BIT.

Das Problem dabei ist nur wenn er seinen Source schon veröffentlicht und andere hätten lieber 32Bit
weil ihr System nun mal auf 32Bit ausgelegt ist dann müssen diese alles ändern

Nicht mein Problem.

gruss
  Mit Zitat antworten Zitat
OlafSt

Registriert seit: 2. Mär 2007
Ort: Hamburg
284 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: performance c++ <> Delphi

  Alt 15. Aug 2017, 00:07
Oder man nimmt eine andere Bibliothek. Würde ich jedenfalls machen, wenn sich einer so betonköpfig verhält
  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 05:00 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 by Thomas Breitkreuz