AGB  ·  Datenschutz  ·  Impressum  







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

c# DLL .NET in DELPHI32 nutzen

Ein Thema von hgiel · begonnen am 22. Sep 2008 · letzter Beitrag vom 12. Jul 2010
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#11

Re: c# DLL .NET in DELPHI32 nutzen

  Alt 25. Sep 2008, 20:17
@EDE: Erstelle dafür bitte ein eigenes Thema
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#12

AW: c# DLL .NET in DELPHI32 nutzen

  Alt 9. Jul 2010, 08:44
Sodele, dann will ich diesen alten Fred noch mal an's Tageslicht holen. Zunächst ein Ausschnit aus der TLB:
Delphi-Quellcode:
interface

uses Windows, ActiveX, Classes, Graphics, mscorlib_TLB, OleServer, StdVCL, System_TLB,
System_Windows_Forms_TLB, Variants;
  

// *********************************************************************//
// In dieser Typbibliothek deklarierte GUIDS . Es werden folgende
// Präfixe verwendet:
// Typbibliotheken : LIBID_xxxx
// CoClasses : CLASS_xxxx
// DISPInterfaces : DIID_xxxx
// Nicht-DISP-Schnittstellen: IID_xxxx
// *********************************************************************//
const
  // Haupt- und Nebenversionen der Typbibliothek
  CoffeeBarMajorVersion = 1;
  CoffeeBarMinorVersion = 0;

  LIBID_CoffeeBar: TGUID = '{139F5D3F-8DE9-4FCE-9923-B6BA49633642}';

  DIID_ICoffeeBarControllerEvents: TGUID = '{EAACEE53-949A-4696-96A7-1EF7C5D31369}';
  IID_ICup: TGUID = '{84845D18-CCF1-46C1-AAD9-6DEF0DDDE05E}';
  IID_ICoffeeBarController: TGUID = '{4C47A0AB-BE53-47CA-B885-A4D4C55E7A98}';
  IID__CoffeeBarController: TGUID = '{A547F46B-C929-3AEC-8D50-D947AE1E32B3}';
  CLASS_CoffeeBar_: TGUID = '{E09C9B19-B865-4CB2-B4A3-3F7E986DCC7A}';
  CLASS_Cup: TGUID = '{E37A70DA-74B2-4CB7-8020-F8E4CE7DBA3D}';
  CLASS_Bean: TGUID = '{F0818ED3-7E04-4F74-827D-F7F7033D7DAF}';
  CLASS_CoffeeBarController: TGUID = '{40921CDF-5944-4E8A-9873-10F92450E7F9}';
type

// *********************************************************************//
// Forward-Deklaration von in der Typbibliothek definierten Typen
// *********************************************************************//
  ICoffeeBarControllerEvents = dispinterface;
  ICup = interface;
  ICupDisp = dispinterface;
  ICoffeeBarController = interface;
  ICoffeeBarControllerDisp = dispinterface;
  _CoffeeBarController = interface;
  _CoffeeBarControllerDisp = dispinterface;

// *********************************************************************//
// Deklaration von in der Typbibliothek definierten CoClasses
// (HINWEIS: Hier wird jede CoClass zu ihrer Standardschnittstelle
// zugewiesen)
// *********************************************************************//
  Cup = ICup;
  Bean = _Object;
  CoffeeBarController = _CoffeeBarController;


// *********************************************************************//
// DispIntf: ICoffeeBarControllerEvents
// Flags: (4096) Dispatchable
// GUID: {EAACEE53-949A-4696-96A7-1EF7C5D31369}
// *********************************************************************//
  ICoffeeBarControllerEvents = dispinterface
    ['{EAACEE53-949A-4696-96A7-1EF7C5D31369}']
    procedure Brewed(const ticket: WideString); dispid 1;
  end;

// *********************************************************************//
// Schnittstelle: ICup
// Flags: (4416) Dual OleAutomation Dispatchable
// GUID: {84845D18-CCF1-46C1-AAD9-6DEF0DDDE05E}
// *********************************************************************//
  ICup = interface(IDispatch)
    ['{84845D18-CCF1-46C1-AAD9-6DEF0DDDE05E}']
    function Taste: WideString; safecall;
    function Get_BeansUsed: WideString; safecall;
    property BeansUsed: WideString read Get_BeansUsed;
  end;

// *********************************************************************//
// DispIntf: ICupDisp
// Flags: (4416) Dual OleAutomation Dispatchable
// GUID: {84845D18-CCF1-46C1-AAD9-6DEF0DDDE05E}
// *********************************************************************//
  ICupDisp = dispinterface
    ['{84845D18-CCF1-46C1-AAD9-6DEF0DDDE05E}']
    function Taste: WideString; dispid 1610743808;
    property BeansUsed: WideString readonly dispid 1610743809;
  end;

// *********************************************************************//
// Schnittstelle: ICoffeeBarController
// Flags: (4416) Dual OleAutomation Dispatchable
// GUID: {4C47A0AB-BE53-47CA-B885-A4D4C55E7A98}
// *********************************************************************//
  ICoffeeBarController = interface(IDispatch)
    ['{4C47A0AB-BE53-47CA-B885-A4D4C55E7A98}']
    procedure OpenCoffeeBar; safecall;
    procedure CloseCoffeeBar; safecall;
    procedure AddBean(const beanName: WideString); safecall;
    procedure BrewCoffee(const beanName: WideString); safecall;
    function GetOrderedCup(const ticket: WideString): ICup; safecall;
    function Get_ServedCoffees: Integer; safecall;
    property ServedCoffees: Integer read Get_ServedCoffees;
  end;

// *********************************************************************//
// DispIntf: ICoffeeBarControllerDisp
// Flags: (4416) Dual OleAutomation Dispatchable
// GUID: {4C47A0AB-BE53-47CA-B885-A4D4C55E7A98}
// *********************************************************************//
  ICoffeeBarControllerDisp = dispinterface
    ['{4C47A0AB-BE53-47CA-B885-A4D4C55E7A98}']
    procedure OpenCoffeeBar; dispid 1610743808;
    procedure CloseCoffeeBar; dispid 1610743809;
    procedure AddBean(const beanName: WideString); dispid 1610743810;
    procedure BrewCoffee(const beanName: WideString); dispid 1610743811;
    function GetOrderedCup(const ticket: WideString): ICup; dispid 1610743812;
    property ServedCoffees: Integer readonly dispid 1610743813;
  end;

// *********************************************************************//
// Schnittstelle: _CoffeeBarController
// Flags: (4432) Hidden Dual OleAutomation Dispatchable
// GUID: {A547F46B-C929-3AEC-8D50-D947AE1E32B3}
// *********************************************************************//
  _CoffeeBarController = interface(IDispatch)
    ['{A547F46B-C929-3AEC-8D50-D947AE1E32B3}']
  end;
...
gefolgt von Code-Snippets, die den Zugriff auf dieses COM-Objekt zeigen sollen:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  CoffeeBar: ICoffeeBarController;
  // CoffeeBar2: TCoffeeBarController;
  Result: Integer;
begin
  CoffeeBar := CreateComObject(CLASS_CoffeeBarController) as ICoffeeBarController;
  CoffeeBar.AddBean('A');
  CoffeeBar.AddBean('B');
  CoffeeBar.AddBean('C');
  CoffeeBar.OpenCoffeeBar;
end;
Das funktioniert soweit schon ganz gut. jetzt stellt sich allerdings die Frage, wie man im Delphi-Programm das Event
Delphi-Quellcode:
  ICoffeeBarControllerEvents = dispinterface
    ['{EAACEE53-949A-4696-96A7-1EF7C5D31369}']
    procedure Brewed(const ticket: WideString); dispid 1;
  end;
abfangen kann
  Mit Zitat antworten Zitat
Benutzerbild von ChrisE
ChrisE

Registriert seit: 15. Feb 2006
Ort: Hechingen
504 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#13

AW: c# DLL .NET in DELPHI32 nutzen

  Alt 9. Jul 2010, 10:00
Hallo,

hast du in deiner TLB nicht auch noch irgendwo ne von TOleServer abgeleitet Wrapper-Klasse. Diese Kapselt das ganze doch wieder in eine Klasse mit den entsprechenden Methoden und Events.

Greez, Chris
Christian E.
Es gibt 10 Arten von Menschen, die die Binär lesen können und die die es nicht können

Delphi programming rules
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#14

AW: c# DLL .NET in DELPHI32 nutzen

  Alt 9. Jul 2010, 10:14
Jep:
Delphi-Quellcode:
// *********************************************************************//
// OLE-Server-Proxy-Klassendeklaration
// Server-Objekt : TCoffeeBarController
// Hilfe-String :
// Standardschnittstelle: _CoffeeBarController
// Def. Intf. DISP? : No
// Ereignisschnittstelle: ICoffeeBarControllerEvents
// TypeFlags : (2) CanCreate
// *********************************************************************//
{$IFDEF LIVE_SERVER_AT_DESIGN_TIME}
  TCoffeeBarControllerProperties= class;
{$ENDIF}
  TCoffeeBarController = class(TOleServer)
  private
    FOnBrewed: TCoffeeBarControllerBrewed;
    FIntf: _CoffeeBarController;
{$IFDEF LIVE_SERVER_AT_DESIGN_TIME}
    FProps: TCoffeeBarControllerProperties;
    function GetServerProperties: TCoffeeBarControllerProperties;
{$ENDIF}
    function GetDefaultInterface: _CoffeeBarController;
  protected
    procedure InitServerData; override;
    procedure InvokeEvent(DispID: TDispID; var Params: TVariantArray); override;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    procedure Connect; override;
    procedure ConnectTo(svrIntf: _CoffeeBarController);
    procedure Disconnect; override;
    property DefaultInterface: _CoffeeBarController read GetDefaultInterface;
  published
{$IFDEF LIVE_SERVER_AT_DESIGN_TIME}
    property Server: TCoffeeBarControllerProperties read GetServerProperties;
{$ENDIF}
    property OnBrewed: TCoffeeBarControllerBrewed read FOnBrewed write FOnBrewed;
  end;
  Mit Zitat antworten Zitat
Benutzerbild von ChrisE
ChrisE

Registriert seit: 15. Feb 2006
Ort: Hechingen
504 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#15

AW: c# DLL .NET in DELPHI32 nutzen

  Alt 9. Jul 2010, 10:27
Gut

Damit hast du ja dann alles was du brauchst

Greez, Chris
Christian E.
Es gibt 10 Arten von Menschen, die die Binär lesen können und die die es nicht können

Delphi programming rules
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#16

AW: c# DLL .NET in DELPHI32 nutzen

  Alt 9. Jul 2010, 10:31
Damit hast du ja dann alles was du brauchst
Vor allem Verständnisschwierigkeiten.
  Mit Zitat antworten Zitat
Benutzerbild von ChrisE
ChrisE

Registriert seit: 15. Feb 2006
Ort: Hechingen
504 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#17

AW: c# DLL .NET in DELPHI32 nutzen

  Alt 9. Jul 2010, 10:38
Hallo,

einfach erstmal kurz vergessen, dass du ein Com-Klasse verwendest

Eine Objekt-Instanz erstellen von TCoffeeBarController und an beliebiger Stelle erstellen bzw. Freigeben - wie halt immer bei Klassen

Dann kannst du dein Event vom Typ TCoffeeBarControllerBrewed in Form1 erstellen mit mit Leben befüllen.

Beim erstellen der Objectinstanz von CoffeBarController dein eigenes Event der Objektinstanz zuweisen perMyCoffeeBarController.OnBrewed := MyBrewedEvent . Wenn du auf das Interface zugreifen willst einfach per MyCoffeeBarController.DefaultInterface.AddBean('a'); Ich hoffe, das Hilft.

Greez, Chris
Christian E.
Es gibt 10 Arten von Menschen, die die Binär lesen können und die die es nicht können

Delphi programming rules
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#18

AW: c# DLL .NET in DELPHI32 nutzen

  Alt 9. Jul 2010, 11:34
Beim erstellen der Objectinstanz von CoffeBarController dein eigenes Event der Objektinstanz zuweisen perMyCoffeeBarController.OnBrewed := MyBrewedEvent
Das funktioniert.
Wenn du auf das Interface zugreifen willst einfach per MyCoffeeBarController.DefaultInterface.AddBean('a');
Das DefaultInterface hat leider keine Methode AddBean. Außerdem wird das Formular nicht sichtbar.
  Mit Zitat antworten Zitat
Benutzerbild von ChrisE
ChrisE

Registriert seit: 15. Feb 2006
Ort: Hechingen
504 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#19

AW: c# DLL .NET in DELPHI32 nutzen

  Alt 9. Jul 2010, 11:44
Hmmm,

jetzt sehe ich es auch erst. Irgendwie ist der OleServer nur für die Events zuständig nicht aber für den Rest Bei meinen bisherigen COM-Objekten war das aber eigentlich immer so Vor allem waren dort auch die entsprechenden Methoden direkt Implementiert. So musste man quasi gar nicht mehr auf das Interface zugreifen.

Sorry, das habe ich nicht gesehen. Dann weiß ich erstmal auch nicht weiter. Bräuchte die komplette TLB.

Greez, Chris
Christian E.
Es gibt 10 Arten von Menschen, die die Binär lesen können und die die es nicht können

Delphi programming rules
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#20

AW: c# DLL .NET in DELPHI32 nutzen

  Alt 9. Jul 2010, 12:40
Habe die TLB.Pas mal angefügt

Nachtrag: IN VB6 geht's so...
Code:
Public WithEvents objCoffeeBarServant As CoffeeBar.CoffeeBarController
Public iCoffeeBarServant As CoffeeBar.ICoffeeBarController
...
Public Sub Form_Load()
   
    Set objCoffeeBarServant = New CoffeeBarController
    Set iCoffeeBarServant = objCoffeeBarServant
    ...
    iCoffeeBarServant.AddBean ("Nicaragua")
    ...
    iCoffeeBarServant.OpenCoffeeBar
   
End Sub
...
Private Sub objCoffeeBarServant_Brewed(ByVal ticket As String)
       
    Dim orderedCupOfCoffee As ICup
    Set orderedCupOfCoffee = iCoffeeBarServant.GetOrderedCup(ticket)
   
    Text1.Text = orderedCupOfCoffee.Taste
    Text2.Text = iCoffeeBarServant.ServedCoffees
   
End Sub
Angehängte Dateien
Dateityp: pas CoffeeBar_TLB.pas (25,2 KB, 10x aufgerufen)

Geändert von r_kerber ( 9. Jul 2010 um 13:01 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 15:04 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