AGB  ·  Datenschutz  ·  Impressum  







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

c# to Delphi Schnittstelle

Offene Frage von "generic"
Ein Thema von Shortybabe_1985 · begonnen am 1. Okt 2021 · letzter Beitrag vom 18. Okt 2021
Antwort Antwort
Shortybabe_1985

Registriert seit: 28. Feb 2005
2 Beiträge
 
#1

c# to Delphi Schnittstelle

  Alt 1. Okt 2021, 20:16
Guten Abend,

ich bin am Verzweifeln und brauche ein wenig Hilfe.
Ich muss in altes Delphi Programm ein Update vornehmen.

In C# sieht mein Code folgendermaßen aus:

private void StartInBackground()
{
_phoneListener = new ScreenPopTelephoneListener();
_phoneListener.Initialize("6000@XXX");
_phoneListener.StartListening("000");

_phoneListener.ScreenPop += new _IScreenPopTelephoneListenerEvents_ScreenPopEventH andler(ScreenPopEvent);
this.Shutdown += new HiPathScreenPop_ShutdownEventHandler(HiPathScreenP op_Shutdown);
}

private void ScreenPopEvent(ScreenPopTelephoneEvent screenpoptelephoneevent)
{
Console.WriteLine(screenpoptelephoneevent.From);
Console.WriteLine(screenpoptelephoneevent.Destinat ion);
Console.WriteLine(screenpoptelephoneevent.QueueNam e);
}

Leider habe ich keine Ahnung wie das in Delphi gelöst wird.

In Delphi 10.4 wurde mir die beigefügte TLB generiert.

Delphi:
var Listener : ScreenPopTelephoneListener;
...
Listener := CoScreenPopTelephoneListener.Create;
Listener.Initialize('6000@XXX');
Listener.StartListening('000');

Wie kann ich auf das Event ScreenPop in Delphi reagieren? (Function)

Vielen Dank im voraus.
Angehängte Dateien
Dateityp: pas HiPathProCenterScreenPopAPILibrary_TLB.pas (41,8 KB, 18x aufgerufen)
  Mit Zitat antworten Zitat
TiGü
Online

Registriert seit: 6. Apr 2011
Ort: Berlin
3.060 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: c# to Delphi Schnittstelle

  Alt 6. Okt 2021, 09:49
Gibt es dazu noch irgendwie Doku oder so?

Ansonsten ein Schuss ins Blaue:

Delphi-Quellcode:
unit Unit3;

interface

uses
    Winapi.Windows, System.SysUtils, System.Classes,
    Vcl.Controls, Vcl.Forms, HiPathProCenterScreenPopAPILibrary_TLB;

type
    // musste ich jetzt selbst anlegen, gab es nur den dispinterface-Typen für???
    IScreenPopTelephoneListenerEvents = interface
        ['{65CA62A4-921C-48B4-A4AA-20739C0F8EDA}']
        function ScreenPop(const ScreenPopTelephoneEvent: IScreenPopTelephoneEvent): HResult; safecall;
        function StatusChanged(newStatus: enListenerStatus): HResult; safecall;
    end;

    TForm3 = class(TForm, IScreenPopTelephoneListenerEvents)
    private
        procedure StartInBackground;
    public
        function ScreenPop(const ScreenPopTelephoneEvent: IScreenPopTelephoneEvent): HRESULT; safecall;
        function StatusChanged(newStatus: enListenerStatus): HResult; safecall;
    end;

var
    Form3: TForm3;

implementation

{$R *.dfm}

{ TForm3 }

procedure TForm3.StartInBackground;
var
    Listener: ScreenPopTelephoneListener;
    Events: _IScreenPopTelephoneListenerEvents;
    ScreenPopEvent: IScreenPopTelephoneEvent;
begin
    Listener := CoScreenPopTelephoneListener.Create;
    Listener.Initialize('6000@XXX');
    Listener.StartListening('000');

    // Unklar, Doku fehlt! Wahrscheinlich eher nicht so gemeint!
    if Supports(Listener, _IScreenPopTelephoneListenerEvents, Events) then
    begin
        ScreenPopEvent := CoScreenPopTelephoneEvent.Create;
        Events.ScreenPop(ScreenPopEvent)
    end
    else
    begin
        // Eher der logischere Weg. Du implementierst das IScreenPopTelephoneListenerEvents selbst und
        // meldest es am Listener an, aber dafür fehlt eine Add- oder Register-Funktion in der importierten TLB-Unit.
        // Siehe auch die Konstanten SCREENPOP_CanNot_Register und SCREENPOP_Already_Registered
        // Also so zum Beispiel:
        Listener.AddEventListener(Self);
        oder
        Listener.RegisterEvents(Self);
    end;
end;

function TForm3.ScreenPop(const ScreenPopTelephoneEvent: IScreenPopTelephoneEvent): HRESULT;
begin
    OutputDebugString(PChar(ScreenPopTelephoneEvent.From));
    OutputDebugString(PChar(ScreenPopTelephoneEvent.Destination));
    OutputDebugString(PChar(ScreenPopTelephoneEvent.QueueName));
    Result := S_OK;
end;

function TForm3.StatusChanged(newStatus: enListenerStatus): HResult;
begin

end;

end.
  Mit Zitat antworten Zitat
Shortybabe_1985

Registriert seit: 28. Feb 2005
2 Beiträge
 
#3

AW: c# to Delphi Schnittstelle

  Alt 12. Okt 2021, 12:25
Oh wow, vielen Dank für die Rückmeldung.

Leider funktioniert dies auch nicht.

Ja es gibt eine Doku, diese findest du im Anhang.

Noch Ideen?
Angehängte Dateien
Dateityp: pdf OSCC_Screen_Pop_API_Guide_DE.pdf (510,3 KB, 27x aufgerufen)
  Mit Zitat antworten Zitat
TiGü
Online

Registriert seit: 6. Apr 2011
Ort: Berlin
3.060 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: c# to Delphi Schnittstelle

  Alt 18. Okt 2021, 09:44
Hm, wenn IScreenPopTelephoneListener das _IScreenPopTelephoneListenerEvents nicht unterstützt und in meinen Augen die Doku wenig Licht ins Dunkel bringt, würde ich an deiner Stelle an Unify mal eine Support Mail schreiben.
Vielleicht ist deren TLB auch nicht ganz richtig oder du hast beim Import was falsch angehakt.
So richtig klar ist das Beispiel auf Seite 38 nicht.

Vielleicht können sie dir ein Minimal-Beispiel schicken, was auf einer importierten TLB in einer nativen Sprache basiert?!
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.415 Beiträge
 
Delphi XE5 Professional
 
#5

AW: c# to Delphi Schnittstelle

  Alt 18. Okt 2021, 13:25
Wenn du da mit Delphi nicht weiter kommst, dann entwickle das in C#.
In C# baust du dir dann eine C API oder einen COM-Server, welche(n) du dann in Delphi nutzt.
Ein Webservice wäre auch noch eine Variante, da macht der Callback aber kein Spaß.
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  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 07:30 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