AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi c DLL in Delphi einbinden (Prozedureinsprungspunkt nicht gefunden)
Thema durchsuchen
Ansicht
Themen-Optionen

c DLL in Delphi einbinden (Prozedureinsprungspunkt nicht gefunden)

Ein Thema von Pow3rus3r · begonnen am 24. Mai 2012 · letzter Beitrag vom 25. Mai 2012
Antwort Antwort
Pow3rus3r

Registriert seit: 17. Apr 2012
43 Beiträge
 
Delphi XE Professional
 
#1

c DLL in Delphi einbinden (Prozedureinsprungspunkt nicht gefunden)

  Alt 24. Mai 2012, 07:03
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:
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;
u08, u16 und u32 sind so definiert:
Code:
typedef unsigned char u08 
typedef unsigned short u16 
typedef unsigned long u32
Ich habe die Typedef nun auf Delphi umgemünzt, jedoch scheint er das so nicht zu fressen:
Delphi-Quellcode:
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 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

Ich bin für alle Tipps dankbar!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.153 Beiträge
 
Delphi 12 Athens
 
#2

AW: c DLL in Delphi einbinden (Prozedureinsprungspunkt nicht gefunden)

  Alt 24. Mai 2012, 07:31
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';
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Pow3rus3r

Registriert seit: 17. Apr 2012
43 Beiträge
 
Delphi XE Professional
 
#3

AW: c DLL in Delphi einbinden (Prozedureinsprungspunkt nicht gefunden)

  Alt 24. Mai 2012, 08:20
Danke! Genau das war der entscheidende Hinweis:
name '_COM_RbsManipulationReq@112';
  Mit Zitat antworten Zitat
Pow3rus3r

Registriert seit: 17. Apr 2012
43 Beiträge
 
Delphi XE Professional
 
#4

AW: c DLL in Delphi einbinden (Prozedureinsprungspunkt nicht gefunden)

  Alt 25. Mai 2012, 07:22
Ich hätte da gleich noch eine Frage zu den C Datentypen.
Folge Typedef in C ist noch vorhanden:
Code:
typedef unsigned long long u64
Was wäre der adäquate Ersatz dafür in Delphi? gibts überhaupt einen 64 Bit Datentypen in Delphi?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: c DLL in Delphi einbinden (Prozedureinsprungspunkt nicht gefunden)

  Alt 25. Mai 2012, 07:25
Klappt es mit UINT64?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: c DLL in Delphi einbinden (Prozedureinsprungspunkt nicht gefunden)

  Alt 25. Mai 2012, 13:57
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';
Hmm.. warum benötigt er für ein Delphi Programm die angabe der summe an Bytes von der Function aus der c++ DLL?
Würde ich verstehen wenn ich eine DLL in Delphi schreibe um diese mit C++ zu verwenden. aber umgekehrt?

gruss
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.153 Beiträge
 
Delphi 12 Athens
 
#7

AW: c DLL in Delphi einbinden (Prozedureinsprungspunkt nicht gefunden)

  Alt 25. Mai 2012, 14:12
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#8

AW: c DLL in Delphi einbinden (Prozedureinsprungspunkt nicht gefunden)

  Alt 25. Mai 2012, 14:18
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.
Ach so .. Na dann

gruss
  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 08:17 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