Einzelnen Beitrag anzeigen

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, 09: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