Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Prozedureinsprungpunkt nicht gefunden (https://www.delphipraxis.net/43830-prozedureinsprungpunkt-nicht-gefunden.html)

lkz633 9. Apr 2005 11:34


Prozedureinsprungpunkt nicht gefunden
 
Hallo,

habe folgende Deklaration:

Delphi-Quellcode:
procedure InitOCR; stdcall; external 'ocr.dll';
  procedure UnInitOCR;stdcall; external 'ocr.dll';
Bekomme aber eine Fehlermeldung, "Prozedureinsprungpunkt nicht gefunden",

die Deklaration der C++ Funktion ist
Delphi-Quellcode:
void InitOCR();
Was mache ich falsch?

Danke und Gruss
lkz633

glkgereon 9. Apr 2005 11:50

Re: Prozedureinsprungpunkt nicht gefunden
 
gibt es auch die UnInitOCR?

Mephistopheles 9. Apr 2005 11:55

Re: Prozedureinsprungpunkt nicht gefunden
 
*kram* *wusel* Voila, habe da mal was aus der Zauberkiste geholt. Damit kannst du gucken, wie die Exporte der DLL wirklich heißen, oder ob es vielleicht nur Ordinals sind.

lkz633 9. Apr 2005 12:00

Re: Prozedureinsprungpunkt nicht gefunden
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

da bekomme ich folgenden Auszug, die Funktionen existieren also.......

Dax 9. Apr 2005 12:06

Re: Prozedureinsprungpunkt nicht gefunden
 
Setze mal einen Unterstrich vor deine Funktionsnamen, dann wird es funktionieren. Im dem Fall, bei dem beim statischen einbinden einer DLL weder Funktionsname noch -index angegeben werden, sucht der Compiler nach einer Funktion mit dem deklarierten Namen, der bei dir ja anders ist als in der DLL.

Mephistopheles 9. Apr 2005 12:11

Re: Prozedureinsprungpunkt nicht gefunden
 
Alternativ

Delphi-Quellcode:
procedure Bla(); stdcall; external 'bla.dll' name 'EchterExportName';
Nachtrag: Ich sehe gerade, daß wir es mit maskierten Namen zu tun haben. Du mußt also vermutlich auch '@0' mit angeben. Also vermutlich:
Delphi-Quellcode:
procedure InitOCR; stdcall; external 'ocr.dll' name '_InitOCR@0';
procedure UnInitOCR; stdcall; external 'ocr.dll' name '_UnInitOCR@0';
Tip: Danach mit depends.exe mal nachschauen, ob deine Delphi-EXE die Namen korrekt importiert.

lkz633 9. Apr 2005 12:47

Re: Prozedureinsprungpunkt nicht gefunden
 
Zitat:

Zitat von Mephistopheles
Nachtrag: Ich sehe gerade, daß wir es mit maskierten Namen zu tun haben. Du mußt also vermutlich auch '@0' mit angeben. Also vermutlich:
Delphi-Quellcode:
procedure InitOCR; stdcall; external 'ocr.dll' name '_InitOCR@0';
procedure UnInitOCR; stdcall; external 'ocr.dll' name '_UnInitOCR@0';

Danke, jetzt klappts einwandfrei. Was bedeutet genau das @0 ?

Gruss
lkz633

Mephistopheles 9. Apr 2005 12:56

Re: Prozedureinsprungpunkt nicht gefunden
 
Das bedeutet, daß insgesamt 0 Bytes an Parametern auf den Stack gelegt werden. Bei 4 kann es zB ein Pointer oder DWORD sein. Sobald du mit Reverse-Engineering anfängst, wirst du es genauer verstehen lernen ;)

Nachtrag: Borland's C++ verwendet einen anderen Code um die Funktionsnamen zu maskieren. Bei Watcom bin ich nicht sicher. Wenn man in C eine Funktion exportiert, und nicht explizit eine .DEF-Datei angibt, in der die Namen ohne Maskierung angegeben sind, werden sie vom Linker automatisch maskiert.
Bei C++ gibt es dann noch so feine Sachen, wo sogar die Typennamen und andere interessante Dinge mit im maskierten Namen verborgen sind. Depends.exe kann die aber alle demaskieren.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:20 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