![]() |
c DLL in Delphi einbinden (Prozedureinsprungspunkt nicht gefunden)
Hallo zusammen,
ich habe ein Problem mit dem Einbinden einer c DLL in Delphi. Und zwar habe ich eine DLL von einem Hardwarehersteller vorgegeben, die ich nun einbinden möchte und bekomme immer den Fehler, dass die Funktion/Prozedureinsprungspunkt nicht gefunden wurde. Der Funktionsaufruf ist in der Doku so definiert: COM_RbsManipulationReq (COM_Handle handle, COM_RbsManipulation manipulation) Die Typedef von COM_RbsManipulation ist in c wie folgt:
Code:
u08, u16 und u32 sind so definiert:
typedef struct COM_RbsManipulationtag
{ u08 TriggerType_1; u08 TriggerMode_1; u32 TriggerSource_1; u32 TriggerValue_1; u32 TriggerHysterese_1; u08 TriggerType_2; u08 TriggerMode_2; u32 TriggerSource_2; u32 TriggerValue_2; u32 TriggerHysterese_2; u08 TriggerType_3; u08 TriggerMode_3; u32 TriggerSource_3; u32 TriggerValue_3; u32 TriggerHysterese_3; u08 TriggerType_4; u08 TriggerMode_4; u32 TriggerSource_4; u32 TriggerValue_4; u32 TriggerHysterese_4; u16 DelayValue; u08 DelayType; u08 BusId; u08 SequenceNumber; u08 ManipulationType; u16 ManipulationDuration; u08 ManipulationDurationType; u08 ManipulationMode; u32 ManipulationTarget; u16 ManipulationTargetValue; u32 ManipulationValue1; u32 ManipulationValue2; u32 ManipulationValue3; u32 MinValue; u32 MaxValue; u08 MinMaxMode; u08 BaseDataType; }COM_RbsManipulation;
Code:
Ich habe die Typedef nun auf Delphi umgemünzt, jedoch scheint er das so nicht zu fressen:
typedef unsigned char u08
typedef unsigned short u16 typedef unsigned long u32
Delphi-Quellcode:
Ich verzweifele gerade daran und bekomme immer wieder meinen Fehler "Prozedureinsprungspunkt nicht gefunden. Ein DLL Export viewer zeigt mir den Funktionsnamen in der DLL so an: _COM_RbsManipulationReq@112
type
Manipulationtag = record TriggerType_1: byte; TriggerMode_1: byte; TriggerSource_1: cardinal; TriggerValue_1: cardinal; TriggerHysterese_1: cardinal; TriggerType_2: byte; TriggerMode_2: byte; TriggerSource_2: cardinal; TriggerValue_2: cardinal; TriggerHysterese_2: cardinal; TriggerType_3: byte; TriggerMode_3: byte; TriggerSource_3: cardinal; TriggerValue_3: cardinal; TriggerHysterese_3: cardinal; TriggerType_4: byte; TriggerMode_4: byte; TriggerSource_4: cardinal; TriggerValue_4: cardinal; TriggerHysterese_4: cardinal; DelayValue: word; DelayType: byte; BusId: byte; SequenceNumber: byte; ManipulationType: byte; ManipulationDuration: word; ManipulationDurationType: byte; ManipulationMode: byte; ManipulationTarget: cardinal; ManipulationTargetValue: word; ManipulationValue1: cardinal; ManipulationValue2: cardinal; ManipulationValue3: cardinal; MinValue: cardinal; MaxValue: cardinal; MinMaxMode: byte; BaseDataType: byte; end; Ich bin für alle Tipps dankbar! |
AW: c DLL in Delphi einbinden (Prozedureinsprungspunkt nicht gefunden)
unsigned long = LongWord
Aber wenn die DLL nicht gefunden winrd, dann hat das rein garnichts mit diesem Record zu tun, denn Delphi beachtet/verbaut keine Parametersignaturen, bei der Generierung des Importnamen. Der Importname entspricht standardmäßig genau dem Funktionsnamen, wenn man nichts Anderes angibt.
Delphi-Quellcode:
function xyt(...): ...; stdcall;
... function xyt(...): ...; external ... name '_COM_RbsManipulationReq@112'; |
AW: c DLL in Delphi einbinden (Prozedureinsprungspunkt nicht gefunden)
Danke! Genau das war der entscheidende Hinweis:
Delphi-Quellcode:
:thumb:
name '_COM_RbsManipulationReq@112';
|
AW: c DLL in Delphi einbinden (Prozedureinsprungspunkt nicht gefunden)
Ich hätte da gleich noch eine Frage zu den C Datentypen.
Folge Typedef in C ist noch vorhanden:
Code:
Was wäre der adäquate Ersatz dafür in Delphi? gibts überhaupt einen 64 Bit Datentypen in Delphi?
typedef unsigned long long u64
|
AW: c DLL in Delphi einbinden (Prozedureinsprungspunkt nicht gefunden)
Klappt es mit UINT64?
|
AW: c DLL in Delphi einbinden (Prozedureinsprungspunkt nicht gefunden)
Zitat:
Würde ich verstehen wenn ich eine DLL in Delphi schreibe um diese mit C++ zu verwenden. aber umgekehrt? gruss |
AW: c DLL in Delphi einbinden (Prozedureinsprungspunkt nicht gefunden)
Das wurde doch vom C so exportiert.
Und da Delphi sowas nicht macht (abgesehn von den BPLs, welche ja C++Buildercompatibel sind), muß man den Namen angeben, welcher C vorgegeben wurde, um Dieses importieren zu können. |
AW: c DLL in Delphi einbinden (Prozedureinsprungspunkt nicht gefunden)
Zitat:
gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:43 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