Einzelnen Beitrag anzeigen

R2009

Registriert seit: 9. Mär 2009
Ort: Heidelberg
440 Beiträge
 
Delphi 2007 Professional
 
#1

C: DLL und Callback Aufruf mit Delphi Parameterübergabe

  Alt 20. Dez 2009, 07:11
Hi,
Das Problem was ich habe ist:
Es funktioniert alles tadellos, bis auf die Parameterübergabe an die Callback-Funktion.
Egal was ich auch anstelle ich bekomme immer 4518732 zurück.

Ich habe, aus diesem Grunde schon in calcresults eine feste int eingegeben.

habe folgenden Code geschrieben:

callb.h
Code:
#ifndef CALLB_H
#define CALLB_H

#include "callb_global.h"


#endif // CALLB_H

typedef bool (CALLBACK(CallbackFunc)(int));

extern "C" void calcresults(CallbackFunc* Callback, DWORD UserData);
callb.cpp
Code:
#include <windows.h>
#include "callb.h"


BOOL APIENTRY DllMain(HINSTANCE hInst, DWORD Reason, LPVOID Reserved)
{
  if(Reason==DLL_PROCESS_ATTACH)
        {
        return  TRUE;
        }

  if(Reason==DLL_PROCESS_DETACH)
        {
        return  TRUE;
        }

  return  FALSE;
}
extern "C" __declspec( dllexport ) void calcresults(CallbackFunc* Callback, DWORD UserData)
{
    int z=15;
   
    Callback(z);
}
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;
  function calcresults(s:pointer;a:dword):boolean;cdecl ; //cdecl

var
  Form1: TForm1;

implementation

{$R *.dfm}
function calcresults(s:pointer;a:dword):boolean;cdecl ;external 'callb.dll'; //cdecl

function Zielfunktion(j:integer):boolean;
begin
  form1.label1.caption:=inttostr(j);
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
  calcresults(@Zielfunktion,5);
end;

end.

Vielen dank im Vorraus
Rainer
Rainer Unger
Mein Profil:
Studium Allgemeine Elektrotechnik TH Darmstadt
Entwicklung von Tools für die Rundsteuer und Zählertechnik.
uP's Atmel Prozessoren (ATmega16,32,88...) in C und Assembler.
  Mit Zitat antworten Zitat