AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

DLL einbinden

Ein Thema von jobo · begonnen am 9. Dez 2011 · letzter Beitrag vom 10. Dez 2011
Antwort Antwort
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#1

DLL einbinden

  Alt 9. Dez 2011, 15:30
Hallo,

ich hab hier ein Problem, bei dem ich nicht weiterkomme.

Ich hab hier eine DLL, die in Delphi genutzt werden soll. In VB und C# läufts.
Doku habe ich zu der DLL nicht.
Unter Delphi liefern 2 Funktionen falsche Werte (verglichen mit VB, C#). Das hat mich dazu gebracht, die Funktionen und Parameter genauer zu betrachten.
Dabei bin ich schließlich bei implib gelandet. Ich hab aber keine Ahnung, was mir das sagen soll (und implib schmeißt Warnungen wg doppelter Symbole):
Code:
LIBRARY    mylib.dll

EXPORTS
    GetID                   @1   ; GetID
    Go                      @2   ; Go
    Init                    @3   ; Init
    GetID                        = _GetID@4                         
    Go                           = _Go@4                         
    Init                         = _Init@0
Dynamisch eingebunden bekomme ich lediglich falsche Werte zurück, statisch eingebunden gibts zusätzlich eine AV, wenn ich die Funktion verlasse, die die DLL ruft.
Was spricht gegen "doppelte Symbole" ? Ich hätte ohne Vorkenntnis vermutet, dass das die Rückgabewerte sind. Das wäre aber nicht wirklich ein Warngrund, oder?
Entsprechen die @ Werte der "Index" Angabe bei statischem Link in Delphi?

Code:
vb
Declare Function Init Lib "mylib.dll" () As Long
Declare Function Go Lib "mylib.dll" (ByVal x As Long) As Long
Code:
delphi
function Init() : Integer; external 'mylib' ;
function Go(byVal : Integer) : Integer; external 'mylib' ;
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

AW: DLL einbinden

  Alt 9. Dez 2011, 15:41
Die Aufrufkonvention fehlt, würde ich jetzt mal so auf den ersten Blick sagen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.622 Beiträge
 
Delphi 12 Athens
 
#3

AW: DLL einbinden

  Alt 9. Dez 2011, 15:45
Scheint mir auch so. Ich würde es mal mit cdecl oder stdcall versuchen.
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
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

AW: DLL einbinden

  Alt 9. Dez 2011, 15:47
Standardmäßig nimmt Delphi Register. Das ist aber in anderen Programmiersprachen, glaube ich, eher ungewöhnlich. Ich würde auf stdcll tippen. Das ist die übliche Aufrufkonvetion, wenn die DLL in mehreren Programmiersprachen verwendet werden können soll.

http://www.michael-puff.de/Programmi...entionen.shtml
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#5

AW: DLL einbinden

  Alt 9. Dez 2011, 16:04
Hallo

ja, danke, der Wald uns so, also Stdcall ist bei dem ganzen Gewurschtel auf der Strecke geblieben. In den dynamischen Aufrufen hatte ich auch StdCall verwendet.
Nun gehts wieder ohne AV.
Leider nachwievor mit falschem Ergebnis.
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

AW: DLL einbinden

  Alt 9. Dez 2011, 16:06
Sind die Werte denn identisch zu dem VB Programm, die du rein gibst?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#7

AW: DLL einbinden

  Alt 9. Dez 2011, 16:10
könnte es daran liegen ?

http://msdn.microsoft.com/de-de/libr...(v=vs.80).aspx
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#8

AW: DLL einbinden

  Alt 9. Dez 2011, 16:10
Argh %&?!

Es geht!

Ja, sie sind identisch ich murks da schon seit 2 Tagen dran rum.
Gruß, Jo
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#9

AW: DLL einbinden

  Alt 9. Dez 2011, 16:13
Also mir kommen gleich die Tränen.

@Bummi: Datentypen habe ich auch geprüft, in C# sind es normale int, in dem alten VB identisch.

Der ganze Mist würde aber bedeuten, dass der einzige Unterschied auf dynamischem VS statischem Link beruht.

Kann das sein?
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#10

AW: DLL einbinden

  Alt 10. Dez 2011, 01:57
Bei der Deklaration muss übrigens der gesamte Name der DLL angegeben werden; die Endung darf nicht fehlen.
Wenn man ausserdem eine Konstante mit dem Namen der DLL deklariert, kann man bequem an einer Stelle den Namen anpassen:
Delphi-Quellcode:
const
  MYLIB_DLL = 'mylib.dll';

type
function Init() : Integer; external MYLIB_DLL;
function Go(x : Integer) : Integer; external MYLIB_DLL;
  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:38 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