Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi DLL in Delphi ansprechen - Zugriff auf Variabeln (https://www.delphipraxis.net/104040-dll-delphi-ansprechen-zugriff-auf-variabeln.html)

ThE_-_BliZZarD 26. Nov 2007 14:12


DLL in Delphi ansprechen - Zugriff auf Variabeln
 
Hallihallo,

ich habe eine Frage zum Zugriff auf eine Funktion in einer DLL.

Die DLL ist in C geschrieben und liefert folgende Funktion:
Code:
WandExport MagickBooleanType MagickGetSize(const MagickWand *wand,
  unsigned long *columns,unsigned long *rows)
{
  *columns=5;
  *rows=6;
  return(MagickTrue);
}
In dieser Funktion geht es mir primär um die zwei unsigned long. Das sind doch Pointer oder?

In Delphi habe ich momentan folgenden Import:

Delphi-Quellcode:
function MagickGetSize(wand: PMagickWand; cols, rows : PCardinal): MagickBooleanType; cdecl; external 'blub.dll' index 311;

// Der Zugriff auf die Werte in der Funktion erfolgt dann wie folgt:
procedure BlaBlub();
var
ori_width, ori_height: Cardinal;
begin
// Wand ist vom Typ PMagickWand und ist initalisiert etc pp.. da kann der Fehler nicht liegen
if (MagickGetSize(wand, @ori_width, @ori_height) = MagickTrue) then begin
   showmessage('blub'); // WIRD angezeigt
end;
// Leider steht in ori_width und ori_height nichts drinne..
end;
Was mache ich falsch? Die Index-nummer habe ich via Disassembler verifiziert, die stimmt.. Leider habe ich von C nicht viel Ahnung.

HELP!^^

hoika 26. Nov 2007 14:19

Re: DLL in Delphi ansprechen - Zugriff auf Variabeln
 
Hallo,

ich nehme bei Pointern immer var


Delphi-Quellcode:
function MagickGetSize(wand: PMagickWand; var cols, rows : Cardinal): MagickBooleanType; cdecl; external 'blub.dll' index 311;
Dann ist auch der Aufruf einfacher (kein Pointer notwendig).

Ausserdem würde ich mal statt dem cdecl mal stdcall versuchen.


Heiko

ThE_-_BliZZarD 26. Nov 2007 15:23

Re: DLL in Delphi ansprechen - Zugriff auf Variabeln
 
Hmm also die Änderung mit var und so hat auch nichts gebracht.. Wie könnte ich den vielleicht die DLL debuggen? Damit ich sehen kann ob da überhaupt ein richtiger Wert drinne steht?

Assertor 26. Nov 2007 16:17

Re: DLL in Delphi ansprechen - Zugriff auf Variabeln
 
Hi Blizzard,

hmm. Ein Doppelpost nur weil keiner antwortet?

Hast Du Dir denn schon mal das angesehen?
ImageMagick Delphi Wrapper

Gruß Assertor

ThE_-_BliZZarD 26. Nov 2007 17:14

Re: DLL in Delphi ansprechen - Zugriff auf Variabeln
 
@Doppelpost: hmm ja der andere war mehr darauf bezogen ob jemand konkrete Ahnung mit ImageMagick hat... hier gings mir mehr drum ob ich vielleicht was beim importen der C header falsch gemacht hab... Sry :D

@Die Wrapper: ja schonmal reingeguckt, aber der erzeugt ja eine ganze Komponente, das will ich gar nicht.. ich will mehr eine Kommandozeilenanwendung haben.. Da kann ich eine Komponente nicht brauchen..

Apollonius 26. Nov 2007 17:17

Re: DLL in Delphi ansprechen - Zugriff auf Variabeln
 
Wenn die Funktion wirklich so kurz ist, kannst du sie doch in der CPU-Ansicht debuggen. Falls du Assembler nicht verstehst, könntest du die Mnemonics auch einfach hier posten.

Luckie 26. Nov 2007 17:33

Re: DLL in Delphi ansprechen - Zugriff auf Variabeln
 
Zitat:

Zitat von hoika
Ausserdem würde ich mal statt dem cdecl mal stdcall versuchen.

Und warum? Weil die C-Funktion als cdecl deklariert ist, würdest du es mit stdcall versuchen?

shmia 26. Nov 2007 17:54

Re: DLL in Delphi ansprechen - Zugriff auf Variabeln
 
Zitat:

Zitat von ThE_-_BliZZarD
@Die Wrapper: ja schonmal reingeguckt, aber der erzeugt ja eine ganze Komponente, das will ich gar nicht.. ich will mehr eine Kommandozeilenanwendung haben.. Da kann ich eine Komponente nicht brauchen..

Ist doch kein Problem. Nimm einfach nur die Unit ImageMagickAPI raus und du hast alles was du brauchst.
Diese Unit ist zwar relativ gross, macht deine Anwendung aber nicht grösser, das fast alles nur Deklarationen sind.
Nur wenn du diese quasi "offizielle" API Übersetzung nimmst, kann die Sache gutgehen.

ThE_-_BliZZarD 5. Dez 2007 21:29

Re: DLL in Delphi ansprechen - Zugriff auf Variabeln
 
Ok danke :D

Der Wrapper von http://www.simdesign.nl/components/imagemagick.html funktioniert mit etwas Ärger sehr gut..


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