AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

C# callback von Delphi-dll

Ein Thema von bert7 · begonnen am 3. Feb 2010 · letzter Beitrag vom 6. Feb 2010
 
bert7

Registriert seit: 31. Jan 2010
3 Beiträge
 
#1

C# callback von Delphi-dll

  Alt 3. Feb 2010, 07:40
hallo,

im Rahmen einer C#-Anwendung soll eine Delphi-dll eine C#-Methode mit Parametern aufrufen, also ein "callback" Thema.
Dazu wird von der C# Anwendung die aufzurufende C#-Funktion in der Delphi-Dll registriert, ein Funktionspointer ("delegate") übergeben. Dazu wird noch ein Testparameter übergeben.

Der testparamter wird korrekt nach Delphi übertragen, aber beim Aufruf der callback -Methode von Delphi aus nach C# klappts nicht:
In C# kommt irgendein 8-stelliger Zufallswert an, meistens derselbe, aber nicht immer.

Hier der Code der Delphi-dll:

Code:

type TCallback = procedure(val: integer);
var callback : TCallback;



procedure RegisterCallback(aCallback : TCallback; value: integer); stdcall;
begin
  callback:= aCallback; // registrieren...
  ShowMessage('In Delphi:'+ IntToStr(value)); // erfolgreich wird "10" ausgegeben

  callback(value); // ...und gleich testen
end;

exports
  RegisterCallback;
Und hier der C#-Code

Code:

    public partial class Form1 : Form
    {
        public delegate void ProcDelegate(int value);

        [DllImport("DLLTest.dll", CallingConvention = CallingConvention.StdCall)]
        public static extern void RegisterCallback(ProcDelegate callBackHandle, int value);


        public Form1()
        {
            InitializeComponent();

            RegisterCallback(CalledFromDelphi,10);// in delphi registrieren, "10" als test mitgeben

        }

        public static void CalledFromDelphi(int value)
        {
            MessageBox.Show("Wert:" + value); // kommt leider nicht "10" an, sondern ein "Zufalls?"-Wert

        }
    }
Erwähnenswert ist noch dass die Messagebox in C# zweimal aufgerufen wird, beidesmal mit großen "Zufalls?"-zahlen, obwohl offensichtlich der callback nur einmal von Delphi aus aufgerufen wird.

Weiss leider nicht , auf welcher Seite die Fehler liegen, vermutlich eher auf C#-Seite ?

Danke.
Bert
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 14:10 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