AGB  ·  Datenschutz  ·  Impressum  







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

Funktion aus DLL einbinden

Ein Thema von RandomDD · begonnen am 22. Aug 2016 · letzter Beitrag vom 22. Aug 2016
Antwort Antwort
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

AW: Funktion aus DLL einbinden

  Alt 22. Aug 2016, 12:45
Beide Quelltexte sind so nicht korrekt, da sie nicht unter allen Delphiversionen funktionieren.
Der Quellcode ist entstanden, als man bei Delphi noch nicht mal wusste, was Unicode überhaupt ist. Und etwas als falsch zu bezeichnen, weil der Code unter neuen Delphi Versionen so nicht mehr läuft, finde ich etwas dreist.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.054 Beiträge
 
Delphi 12 Athens
 
#2

AW: Funktion aus DLL einbinden

  Alt 22. Aug 2016, 14:39
Ich habe damals auch immer den konkreten Typ verwendet (nachdem ich es gelernt hatte), weil das andere nun einmal ein Metatyp war und ist. Das ist ja nicht neu, sondern war damals auch schon so.
Sich darauf zu verlassen, dass der immer auf Ansi zeigt, war da auch schon falsch.

Ob PChar später wirklich Unicode wird, war natürlich nicht klar (war aber zu vermuten aus dem Delphiquelltext heraus), aber klar war, dass PAnsiChar und PWideChar bereits exakt definiert waren und heute ja weiter sind...

Und wenn man mal in den Quelltext von Delphi 4 (!) schaut, da gab es die Unterscheidung ja auch schon...
Delphi-Quellcode:
function GetCommandLineA; external kernel32 name 'GetCommandLineA';
function GetCommandLineW; external kernel32 name 'GetCommandLineW';
function GetCommandLine; external kernel32 name 'GetCommandLineA';
Wenn man das dann damals aus Unwissenheit anders gemacht hat, ist das ja in Ordnung. Aber zu sagen, dass es korrekt war, finde ich nicht richtig. Unwissenheit schützt vor Strafe bzw. hier Problemen nicht.

// EDIT:
Der Quellcode ist entstanden, als man bei Delphi noch nicht mal wusste, was Unicode überhaupt ist.
Das ist schlicht falsch. Da brauchst du nur in die alten Delphiversionen schauen. Nur weil der Stringtyp in Delphi nicht Unicode war, heißt das noch lange nicht, dass es kein Unicode gab. PWideChar konntest du da problemlos verwenden um die Unicodefunktionen aufzurufen.
Sebastian Jänicke
AppCentral

Geändert von jaenicke (22. Aug 2016 um 14:43 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

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

AW: Funktion aus DLL einbinden

  Alt 22. Aug 2016, 15:04
Seid doch so lieb und kommt wieder runter.
Die meisten von uns haben doch immer noch Char=AnsiChar-Leichen im Keller liegen, und den meisten ist klar, daß das Leichen sind.
Nur falls irgendein Naivling daher kommt und Char in jedem Fall mit Byte übersetzt, sollte man mindestens da wo es notwendig ist mit AnsiChar oder WideChar oder Shortstring oder Ansistring oder .... typisieren.
"korrekt" ist übrigens eine Eigenschaft, die stark von ihrer Umgebung abhängig ist.
Es gibt ja genügend Beispiele für etwas was mal korrekt war und heute dieses Prädikat überhaupt nicht mehr verdient.

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
 
#4

AW: Funktion aus DLL einbinden

  Alt 22. Aug 2016, 15:34
Wo ist das Problem..
Das eine hat genauso seine Berechtigung wie das andere.

Man muss sich nur darüber im klaren sein was man nun will... A oder W
Kinderkram sich deswegen jetzt aufzuregen.

Wenn ich meine Code in Unicode.. W schreibe dann benötige ich keine {$IFDEF UNICODE} Anweisung genauso umgekehrt.
Ist unnötiger Ballast..
Es wäre nur in dem Fall nötig wenn ich eine Versions Übergreifende Anwendung (Komponente) zur Verfügung stelle die alle auch älter Delphi Versionen Abdecken soll.


gruss
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: Funktion aus DLL einbinden

  Alt 22. Aug 2016, 15:40
Ich glaube ihr redet mindestens zu 50% aneinander vorbei.
jaenicke sagt nur, dass PChar + ShellexecuteA + Delphi 2009 oder höher in die Hose geht.
Und da hat er Recht. Da gibt es nichts dran zu diskutieren.

Ob mans nun mit Compilerschaltern richtig macht oder explizit PAnsiChar + ShellexecuteA bzw. PWideChar + ShellexecuteW benutzt ist letztendlich ja mehr oder weniger egal.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: Funktion aus DLL einbinden

  Alt 22. Aug 2016, 18:00
Zitat:
jaenicke sagt nur, dass PChar + ShellexecuteA + Delphi 2009 oder höher in die Hose geht.
Und da hat er Recht. Da gibt es nichts dran zu diskutieren.
Und was sagt das nun aus?
Es sollte doch klar sein das man ShellexecuteA mit PChar (WideChar) nicht verwenden kann.
Dafür benötige ich aber keine Compilerschalter um das richtig zu stellen.

Zitat:
Ob mans nun mit Compilerschaltern richtig macht oder explizit PAnsiChar + ShellexecuteA bzw. PWideChar + ShellexecuteW benutzt ist letztendlich ja mehr oder weniger egal.
Nö ist nicht egal.

Entweder ich schreibe meine Anwendung in Unicode oder halt nicht. (Das geht ohne den zusätzlichen Ballast)
Das jeder glaubt irgendwelche Schalter umlegen zu müssen damit etwas funktioniert.
Es gibt letztendlich nur eins, 0 oder 1.

Mal abgesehen davon das der Compiler wenn er denn richtig tickt es eh nicht zulassen würde.

gruss

Geändert von EWeiss (22. Aug 2016 um 18:02 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.054 Beiträge
 
Delphi 12 Athens
 
#7

AW: Funktion aus DLL einbinden

  Alt 22. Aug 2016, 18:31
Und was sagt das nun aus?
Es sollte doch klar sein das man ShellexecuteA mit PChar (WideChar) nicht verwenden kann.
Die Quelltexte oben hast du aber schon gesehen, oder? Da ist es ja eben gerade nicht so...
Sonst hätte ich auch nichts geschrieben...

//edit:
Und ohne Ballast geht auch indem man PWideChar plus W-Variante benutzt. Das funktioniert dann sogar im zugegebenermaßen unwahrscheinlichen Fall, dass PChar irgendwann auf UTF-8 zeigt...
Sebastian Jänicke
AppCentral

Geändert von jaenicke (22. Aug 2016 um 18:37 Uhr)
  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 20:24 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