AGB  ·  Datenschutz  ·  Impressum  







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

DLL werte übergabe

Ein Thema von arbu man · begonnen am 27. Mai 2006 · letzter Beitrag vom 27. Mai 2006
Antwort Antwort
Benutzerbild von arbu man
arbu man

Registriert seit: 3. Nov 2004
Ort: Krefeld
1.108 Beiträge
 
Delphi 7 Professional
 
#1

DLL werte übergabe

  Alt 27. Mai 2006, 18:15
Hi,

ich fast am verzweifeln, ich habe eine DLL Funktion der ein Integer wert übergeben wird bei der DLL kommt aber immer 1243288 an. egal welchen wert am einstzt.

DLL:
Delphi-Quellcode:
...
function init(const ah, fh: integer;const pa:TPointerArray;const sendmsg: Pointer): integer; stdcall;
begin
  showmessage(inttostr(fh)); // immer immer 1243288
  feditor:= Tfeditor.Create(application);
  Windows.SetParent(feditor.Handle, fh); // ungültiges handle da immer 1243288
  feditor.Show;
end;

exports
     init;
...
Programm:
Delphi-Quellcode:
...
type TTaskInit = function (const ah, fh: integer;const pa:TPointerArray;const sendmsg: Pointer): integer;
...
procedure Tfmain.loadtask(name: string);
var
  h: integer;
  ti: TTaskInit;
begin
  // Überprüfen ob task vorhanden ist wenn nicht abbrechen
  if not fileexists(pfad+name+DLLEXT) then begin
    exit;
    showmessage('Task "'+name+'" konnte nicht geladen werden.'+BR+BR+'Datei "'+pfad+name+DLLEXT+'" konnte nicht gefunden werden.');
  end;
  h:= LoadLibrary(pchar(pfad+name+DLLEXT));
  if h<>0 then begin
    @ti := GetProcAddress(h, 'init');
    if @ti <> nil then begin
      showmessage(inttostr(fmain.Handle));// hier ist der wert richtig
      ti(application.Handle, fmain.Handle, [nil], nil);// was läuft da falsch
    end else begin
      showmessage('Task "'+name+'" konnte nicht geladen werden.'+BR+BR+'Function "init" wurde in der DLL nicht gefunden')
    end;
  end else begin
    showmessage('Task "'+name+'" konnte nicht geladen werden.'+BR+BR+'DLL-Handle ist 0');
  end;
  FreeLibrary(h);
end;
...
Leider habe ich keine erklärung für den Fehler ich hoffe ihr könnt mir helfen.

thx, arbu
Björn
>> http://bsnx.net <<
Virtual DP Stammtisch v1.0"iw" am 19.09.2007 - ich war dabei!
  Mit Zitat antworten Zitat
Daniel G
(Gast)

n/a Beiträge
 
#2

Re: DLL werte übergabe

  Alt 27. Mai 2006, 18:24
Irgendwas stimmt da in meinen Augen mit dem stdcall; nicht. Bist du sicher, dass du das in einer Pascal - DLL brauchst? Und wenn, warum fehlt das dann in deinem Programm?
  Mit Zitat antworten Zitat
Benutzerbild von arbu man
arbu man

Registriert seit: 3. Nov 2004
Ort: Krefeld
1.108 Beiträge
 
Delphi 7 Professional
 
#3

Re: DLL werte übergabe

  Alt 27. Mai 2006, 18:32
Danke ohne stdcall; klappt es

Was bedeutet stdcall eigentlich ?
Björn
>> http://bsnx.net <<
Virtual DP Stammtisch v1.0"iw" am 19.09.2007 - ich war dabei!
  Mit Zitat antworten Zitat
Daniel G
(Gast)

n/a Beiträge
 
#4

Re: DLL werte übergabe

  Alt 27. Mai 2006, 18:41
stdcall; übergibt die Parameter einer Funktion von rechts nach links. Das ist z.B. für die System - DLL's notwendig. Das hat imho was mit C/C++ zu tun. Die Parameterübergabe einer Funktion in Delphi geht ja bekanntlich von links nach rechts, d.h. wenn du mit einem Pascal Programm eine Funktion aus einer C/C++ - DLL aufrufen willst, musst du die Funktion in deinem Programm mit einem "stdcall;" dahinter deklarieren, damit die Parameter der DLL in der richtigen Reihenfolge übergeben werden. Äääh.... Verständlich?

//Edit:
Oder um es kurz mit den Worten der OH zu sagen:
"Die Konventionen register und pascal übergeben Parameter von links nach rechts. Der links stehende Parameter wird also zuerst ausgewertet und übergeben, der rechts stehende Parameter zuletzt. Die Konventionen cdecl, stdcall und safecall übergeben die Parameter von rechts nach links."
  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 10:53 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