![]() |
dll einbinden
Hi,
Ich habe eine Funktion aus einer Dll in mein Programm eingebunden und zwar so:
Delphi-Quellcode:
doch es kommt eine Fehlermeldung und zwar diese:function ProzentBerechnung(Hauptwert: string; Nebenwert: string): string; external DLLNAME; stdcall; [DCC Fehler] test.pas(124): E2037 Deklaration von 'ProzentBerechnung' unterscheidet sich von vorheriger Deklaration kann mir jemand weiter helfen? Dazu muss ich sagen ich hatte vorher die Funktion komplett im Programm stehen hab sie nun in eine Dll hinzugefügt und rufe Sie nun so auf allerdings klappt dies nicht wie man an dem Fehler sieht :/ |
Re: dll einbinden
Wie sieht die Funktionsdeklaration in der Dll bzw. der Export aus?
|
Re: dll einbinden
Und mit Strings würde ich das ganze nicht machen, da Du sonst die BorlandMM.dll (oder weiß Gott, wie die heißt) mitgeben musst. Mach es lieber mit PChars.
|
Re: dll einbinden
Delphi-Quellcode:
so siehts es in der dll aus hab die anderen beiden funktionen mal außen vor gelassen
function ProzentBerechnung(Hauptwert: string; Nebenwert: string): string; stdcall;
begin if Hauptwert = '0' then Result:= '0' Else Result:= FloatToStrF(StrToFloat(Nebenwert)/StrToFloat(Hauptwert)*100,ffFixed,10,2); end; exports ProzentBerechnung, NFak, TorProzent; |
Re: dll einbinden
Und wie rufst du sie im Programm auf?
|
Re: dll einbinden
Sorgst du dafür, das die selbe VCL verwendet wird (ShareMem in Uses)?
|
Re: dll einbinden
Zitat:
Und mach mal aus den Strings --> WideStrings |
Re: dll einbinden
Zitat:
Delphi-Quellcode:
so wird sie im eigentlich Programm aufgerufen.
function ProzentBerechnung(Hauptwert: string; Nebenwert: string): string; external DLLNAME; stdcall;
Im Hauptprogramm ist die Funktion nicht noch einmal deklariert. |
Re: dll einbinden
Zitat:
|
Re: dll einbinden
Zitat:
Delphi-Quellcode:
ProzentBerechnung("wert1","wert2") |
Re: dll einbinden
Hast du denn jetzt schon eine Lösung?
Schreibe mal, wie ich das mache: Also ich habe mehrere DLL´s für Perepherie-Geräte. Da wird mir z.B. eine Funktion gegeben in der Dokumentation für das Perepherie-Gerät, die lautet:
Delphi-Quellcode:
Um diese in meinem Programm einzubinden habe ich sie wie folgt deklariert:
function MMC_COM_open(portnumber,baudrate:integer):integer;
Delphi-Quellcode:
In deiner Unit kannst du sie dann ganz normal verwenden:
const ExtLib = 'MMC.DLL'
.. function MMC_COM_open(portnumber,baudrate:integer):integer; stdcall external ExtLib;
Delphi-Quellcode:
gleiche Vorgehensweise nimmst du, wenn es sich nicht um Übergabewerte handelt, die den Typ Integer haben. Wenn du strings übergeben musst, kann es sein, dass du diese in PAnsiChar umcasten musst. Hier noch ein Bsp., wie ich eine Function einer DLL benutze, bei der ich dieses Umcasten verwenden muss:
...
procedure Beispiel; var iWert: integer; begin // tue etwas iWert := function MMC_COM_open(1,9600); // tue weiteres end;
Delphi-Quellcode:
MMC_sendCommand(PAnsiChar('SV'+inttostr(iGeschwindigkeit)));
|
Re: dll einbinden
Liste der Anhänge anzeigen (Anzahl: 2)
hab es nun hinbekommen. Allerdings wenn ich nun mein Programm beende bekomme ich komischerweise diesen Fehler:
Siehe Anhang :) |
Re: dll einbinden
Wie sieht dein Code nun aus?
|
Re: dll einbinden
hmm Problem scheint behoben, ich habe aus der DLL in uses einfach ShareMem gelöscht und habe es somit nur noch im Hauptprogramm stehen, seit dem tritt der Fehler nicht mehr auf.
War es ein Fehler ShareMem in die DLL zuschreiben? |
Re: dll einbinden
Zitat:
DLL
Delphi-Quellcode:
function NFak(Val: Integer): INT64; stdcall; begin if Val < 0 then raise Exception.Create('Val muss größer/gleich 0 sein.'); if Val = 0 then Val := 1; Result := 1; repeat Begin Result := Result * Val; Dec(Val) End; until Val <= 1; end; Programm
Delphi-Quellcode:
stdcall stand nicht an der gleichen Stelle wie in der DLL dies hat wohl den Fehler verursacht, als ich es geändert habe ging es.function NFak(Val: Integer): INT64; external DLL; stdcall; |
Re: dll einbinden
Die Dateianhänge als Bitmap zu speichern ist keine gute Idee, wie wäre es mit .png oder meinetwegen auch .jpg? So sind die fast 3 MiB groß...
Wenn du mit Strings als Parameter oder Rückgabewert arbeitest, dann musst du gezwungenermaßen in DLL und Projekt (nicht Unit!) an erster Stelle ShareMem stehen haben. |
Re: dll einbinden
Zitat:
|
Re: dll einbinden
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:59 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