Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   DLL Schnitstelle (https://www.delphipraxis.net/204889-dll-schnitstelle.html)

himitsu 11. Jul 2020 14:06

AW: DLL Schnitstelle
 
Zitat:

VB Verwendet die gleiche DLL und bekommt einen Pointer und kann den Wert (CertificationID) abholen.
Mein Delphi Code nicht??
Also ist möglicherweise im oberen Bereich /* 2: ---- oder /* 3: ---- etwas falsch.
siehe #19 und #16 ... k.A. was man da sonst noch sagen soll.

Das sind allgemeine Grundlagen, die fast überall gleich sind, weil Viele es so machen.


Ich hoffe nur jemand macht sein teures Wormlaufwerk nicht kaputt.
Quelle: https://xbaseforum.de/viewtopic.php?p=132766

hewy 11. Jul 2020 14:09

AW: DLL Schnitstelle
 
Ja richtig danke für den Hinweis!
Sollte heissen:
if CertificationID <> nil then
begin

DeddyH 11. Jul 2020 14:16

AW: DLL Schnitstelle
 
Einmal grundsätzlich: man übergibt 2 Parameter an die Funktion, die auch beide von der DLL überschrieben werden, Rückgabe ist ein Fehlercode. Daraus folgt, dass man auch beide Parameter als Var-Parameter deklarieren muss. Ich habe die Cryptovision-API gerade nicht zur Hand, aber mit ziemlicher Sicherheit gibt die Funktion im 2. Parameter entweder die Anzahl der tatsächlich geschriebenen Bytes des 1. Parameters zurück, oder falls dieser zu knapp dimensioniert ist, die Anzahl der benötigten Bytes. Man kann nun also die benötigten Bytes ermitteln, indem man die Funktion mit den Werten nil für den PAnsiChar und 0 für die Länge übergibt. Anschließend wertet man die zurückgegebene Länge (deshalb Var-Parameter) aus, reserviert entsprechenden Speicher und übergibt diesen dann wie vorhin schon einmal erwähnt.

hewy 11. Jul 2020 14:24

AW: DLL Schnitstelle
 
Heiii danke DeddyH das war das Problem.

function se_getCertificationId(var certificationId: PAnsiChar; certificationIdLength: Cardinal): Cardinal; cdecl; external 'se-api-c.dll';
Geändert zu:
function se_getCertificationId(var certificationId: PAnsiChar; var certificationIdLength: Cardinal): Cardinal; cdecl; external 'se-api-c.dll';

Und schon funzt alles.
Viele Dank. Auch an alle Andern die an meiner 30 Jährigen Delphi Erfahrung gezweifelt haben.

Heiri

DeddyH 11. Jul 2020 14:29

AW: DLL Schnitstelle
 
Ja, immer diese dummen Sternchen in C, die kann man leicht übersehen :wink:

venice2 11. Jul 2020 14:32

AW: DLL Schnitstelle
 
Zitat:

Zitat von DeddyH (Beitrag 1469377)
Ja, immer diese dummen Sternchen in C, die kann man leicht übersehen :wink:

Zitat:

Viele Dank. Auch an alle Andern die an meiner 30 Jährigen Delphi Erfahrung gezweifelt haben.
Was für ein Ärger aber auch das String nicht gleich PAnsiChar ist.
Wie dem auch sei.

DeddyH 11. Jul 2020 14:33

AW: DLL Schnitstelle
 
Was willst Du mir mit diesem Kommentar mitteilen?

venice2 11. Jul 2020 14:34

AW: DLL Schnitstelle
 
Zitat:

Zitat von DeddyH (Beitrag 1469379)
Was willst Du mir mit diesem Kommentar mitteilen?

Dir nichts. ;) bzw. Im bezug auf die Sternchen die nun mal keinen String repräsentieren.

himitsu 11. Jul 2020 14:50

AW: DLL Schnitstelle
 
Zitat:

Was für ein Ärger aber auch das String nicht gleich PAnsiChar ist.
String ist PChar und da das ein compilerabhängeriger Typ ist, kann es auch passieren, dass im Jahr 2009 das von ANSI zu Unicode wechselte.

String/PChar = AnsiString/PAnsiChar bis Delphi 2007
String/PChar = UnicodeString/PWideChar seit Delphi 2009

und nicht zu verwechseln mit WideString, welches kein Delphi-Typ ist, sondern nur die Kapselung der OLE32-String-API.

TiGü 12. Jul 2020 12:43

AW: DLL Schnitstelle
 
Zitat:

Zitat von hewy (Beitrag 1469376)
Heiii danke DeddyH das war das Problem.

function se_getCertificationId(var certificationId: PAnsiChar; certificationIdLength: Cardinal): Cardinal; cdecl; external 'se-api-c.dll';
Geändert zu:
function se_getCertificationId(var certificationId: PAnsiChar; var certificationIdLength: Cardinal): Cardinal; cdecl; external 'se-api-c.dll';

Und schon funzt alles.
Viele Dank. Auch an alle Andern die an meiner 30 Jährigen Delphi Erfahrung gezweifelt haben.

Heiri

Meine Güte, da guckt man auf'n Sonntagmittag in den Thread, sieht ein Haufen Im-Kreis-Gewixe um unwichtige Details und Nichtigkeiten, nur um dann festzustellen, dass die RICHTIGE Lösung aus Beitrag Nummer ZWEI (Hinweis: Translation Nr. 2) schließlich auf der DRITTEN Seite von jemand anderen nochmal gefunden/kopiert wurde.

Hewy, dreißig Jahre Delphi-Erfahrung sind zwar gut und schön, aber mit dreißig Sekunden erhöhtem Leseverständnisses und/oder stumpfen Ausprobieren meiner Vorschläge hätte viel Zeit und Nerven aller Beteiligten gespart werden können.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:28 Uhr.
Seite 3 von 4     123 4      

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