![]() |
C-DLL Probleme in Delphi
Hallo,
ich habe ja nun angefnagen mit der Doku, also wollte ich anfangen zu prüfen, kommt eine Verbindung zu stande, aber ich komme bereits dort auf Probleme Entweder hab ich etwas falsch gemacht oder verstehe nichts von C im zusammenhang mit Delphi. Folgedes, die DLL die mit C erstellt ist Zitat:
Ich habe unterhalb von public und Private eine Procedure weil mir nichts anderes bewusst ist als externe angegeben sieht so aus
Delphi-Quellcode:
in einer procedure hab ich nun
procedure csp2Init(nComPort: LongInt); external 'Csp2.dll'
Delphi-Quellcode:
da LongInt ein Integer erwartet laut Doku sollte es so gehen
csp2Init(1);
Zitat:
nun wenn ich ausführe kommt eine Exception vom Type EConvertError mit dem Inhalt Zitat:
![]() Bedanke mich schon im Vorraus |
Re: C-DLL Probleme in Delphi
Hallo,
Hallo, schon das
Delphi-Quellcode:
hätte dir doch sagen müssen,
if (csp2Init(COM1) == STATUS_OK)
dass es eine Funktion, keine Prozedur ist. function csp2Init(nComPort: LongInt): Longint; wobei LongInt oder Integer hier egal ist (32bit). In Google findet man zum Bsp. zu DLL_IMPORT_EXPORT #define DLL_IMPORT_EXPORT __declspec(dllexport) __declspec heisst in Delphi stdcall; function csp2Init(nComPort: LongInt): Longint; stdcall; Unter C wird bei Funktionsnamen immer ein _ vorangestellt. function _csp2Init(nComPort: LongInt): Longint; stdcall; NoMangle musst du noch rausfinden. Heiko |
Re: C-DLL Probleme in Delphi
Zitat:
|
Re: C-DLL Probleme in Delphi
danke
NoMangle deutet an das es 'extern "C"' heisst, was bedeutet das die Funktion genau mit dem angegebenen Namen exportiert wird. DLL_IMPORT_EXPORT bedeutet letztlich einfach stdcall Danke werde es nun versuchen :-) Nun kam zwischenzeitlich noch ein Post Zitat:
Hier mal die Komplette Datei Zitat:
|
Re: C-DLL Probleme in Delphi
Hallo,
Zitat:
Es bedeutet, dass kein C++-Name-Mangling gemacht wird Bsp: int foo -> wird zu int _foo@0 extern C heisst, dass nur der Unterstrich als Prefix drankommt. schau dir die DLL doch mal mit einem Hex-Editor an. Im Header stehen die exportierten Namen. Es gab doch mal ein Tool für die exportierten Funktionen (Schnellansicht im Explorer ?) Heiko |
Re: C-DLL Probleme in Delphi
tdump.
Ansonsten musst du deine eine Aussage invertieren: extern "C" bedeutet, dass kein Name mangling durchgeführt wird, es also extra kein "@0" Suffix bekommt (bzw. Signatursuffix im allgemeinen). |
Re: C-DLL Probleme in Delphi
Delphi-Quellcode:
in einer Procedure
function csp2Init(nComPort: Integer) : Integer; stdcall; external 'Csp2.dll'
Delphi-Quellcode:
Die Procdeure GetErrorMessage gibt eine Fehlermeldung falls kein 0 ist aus, es ist momentan erstmal nur der Test um Daten auszulesen klar ist das das nicht sondlich schön aber es funktioniert
error := csp2Init(0); //COM1
GetErrorMessage(error); Wenn ich -1 angebe kommt Ungültige Parameter BAD PARAMS wenn ich eine nicht vohranden Schnittstelle anvisiere kommt BAD CONNECTIOn Wenn ich 0 nehme für COM1 kommt auch wenn ich das abfragen würde ALLES STATUS_OK Also funktionert es ohne error := _csp2Init(0) Werd aber weiter machen und schauen, im prinzip wird die DLL ja verarbeitet deswegen die rückmeldungen also scheint es doch nun gelöst zu sein. Für meine Sicht bin ich zufrieden :-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:23 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