Einzelnen Beitrag anzeigen

WizoHulk

Registriert seit: 25. Jun 2010
198 Beiträge
 
Delphi 5 Enterprise
 
#1

ActiveX COM mit Delphi 2010

  Alt 8. Okt 2011, 02:24
Hallo Gemeinde,

Ich habe mir das Buch COM/DCOM für Delphi besorgt.
Ich habe nach Anleitung versucht einen in process Server zu erstellen. (Seite 152)
Da aber die Anleitung für Delphi 4 beschrieben ist, habe ich mir gedacht, das sollte ja mit Delphi 2010 nicht großartig anders sein.

PUSTEKUCHEN!!!!

Laut Buch kann mann über den Kontexmenu die Methoden der COM Klasse in die Type Libary eintragen.
Dies konnte ich bei Delphie 2010 nicht und musste dieses Handisch nachgetragen.
Aber Leider Funktioniert dies nicht.

Beim erstellen eines OLEObjectes war alles in Ordnung, ich kann jedoch nicht auf die beiden Methoden zugreifen und kriege eine Meldung das diese nicht zur verfügung stehen.

Weiß jemand zufällig was ich hier falsch gemacht habe bzw gibt es ein Tutorial für d2010?

Hier mal mein Quellcode


Delphi-Quellcode:
unit COMMWST_Impl;
{$WARN SYMBOL_PLATFORM OFF}

interface

uses
  ComObj, ActiveX, COMMWST_TLB, StdVcl;

type
  TMWST = class(TAutoObject, IMWST)
  private
    FMWSTSatz: Real;

  Public
    procedure Initialize; override;
    function GetBrutto(const aNetto: Currency): Currency; safecall;
    procedure SetPercent(const aPercent: integer); safecall;
  protected

  end;

implementation

uses ComServ;

{ TMWST }

function TMWST.GetBrutto(const aNetto: Currency): Currency;
begin
  Result := aNetto * FMWSTSatz;
end;

procedure TMWST.Initialize;
begin
  inherited Initialize;

end;

procedure TMWST.SetPercent(const aPercent: integer);
begin
  FMWSTSatz := 1.0 + (aPercent);
end;

initialization

TAutoObjectFactory.Create(ComServer, TMWST, Class_MWST, ciMultiInstance,
  tmApartment);

end.
und die Bibliothek
Delphi-Quellcode:
unit COMMWST_TLB;

// ************************************************************************ //
// WARNUNG
// -------
// Die in dieser Datei deklarierten Typen wurden aus Daten einer Typbibliothek
// generiert. Wenn diese Typbibliothek explizit oder indirekt (über eine
// andere Typbibliothek) reimportiert wird oder wenn der Befehl
// 'Aktualisieren' im Typbibliotheks-Editor während des Bearbeitens der
// Typbibliothek aktiviert ist, wird der Inhalt dieser Datei neu generiert und
// alle manuell vorgenommenen Änderungen gehen verloren.
// ************************************************************************ //

// $Rev: 17244 $
// Datei am 08.10.2011 01:17:05 erzeugt aus der unten beschriebenen Typbibliothek.

// ************************************************************************ //
// Typbib.: D:\SVN\COM_Server\COM_MWST (1)
// LIBID: {707D6E5D-0886-4BED-A8EB-2305E6F026A0}
// LCID: 0
// Hilfedatei:
// Hilfe-String:
// Liste der Abhäng.:
// (1) v2.0 stdole, (C:\Windows\SysWOW64\stdole2.tlb)
// ************************************************************************ //
{$TYPEDADDRESS OFF} // Unit muss ohne Typüberprüfung für Zeiger compiliert werden.
{$WARN SYMBOL_PLATFORM OFF}
{$WRITEABLECONST ON}
{$VARPROPSETTER ON}
{$ALIGN 4}
interface

uses Windows, ActiveX, Classes, Graphics, OleServer, StdVCL, Variants;

// *********************************************************************//
// In der Typbibliothek deklarierte GUIDS. Die folgenden Präfixe werden verwendet:
// Typbibliotheken : LIBID_xxxx
// CoClasses : CLASS_xxxx
// DISPInterfaces : DIID_xxxx
// Nicht-DISP-Interfaces: IID_xxxx
// *********************************************************************//
const
  // Haupt- und Nebenversionen der Typbibliothek
  COMMWSTMajorVersion = 1;
  COMMWSTMinorVersion = 0;

  LIBID_COMMWST: TGUID = '{707D6E5D-0886-4BED-A8EB-2305E6F026A0}';

  IID_IMWST: TGUID = '{B82F856E-4564-4DBA-B0D2-6A42C7B11B5A}';
  CLASS_MWST: TGUID = '{7EA608E5-C04C-4051-97CA-70A10CE46009}';
type

// *********************************************************************//
// Forward-Deklaration von in der Typbibliothek definierten Typen
// *********************************************************************//
  IMWST = interface;
  IMWSTDisp = dispinterface;

// *********************************************************************//
// Deklaration von in der Typbibliothek definierten CoClasses
// (HINWEIS: Hier wird jede CoClass ihrem Standard-Interface zugewiesen)
// *********************************************************************//
  MWST = IMWST;


// *********************************************************************//
// Interface: IMWST
// Flags: (4416) Dual OleAutomation Dispatchable
// GUID: {B82F856E-4564-4DBA-B0D2-6A42C7B11B5A}
// *********************************************************************//
  IMWST = interface(IDispatch)
    ['{B82F856E-4564-4DBA-B0D2-6A42C7B11B5A}']
    function GetBrutto(const aNetto: Currency): Currency; safecall;
    procedure SetPercent(const aPercent: integer); safecall;
  end;

// *********************************************************************//
// DispIntf: IMWSTDisp
// Flags: (4416) Dual OleAutomation Dispatchable
// GUID: {B82F856E-4564-4DBA-B0D2-6A42C7B11B5A}
// *********************************************************************//
  IMWSTDisp = dispinterface
    ['{B82F856E-4564-4DBA-B0D2-6A42C7B11B5A}']
    function GetBrutto(const aNetto: Currency): Currency; dispid 2;
    procedure SetPercent(const aPercent: integer); dispid 2;
  end;

// *********************************************************************//
// Die Klasse CoMWST stellt die Methoden Create und CreateRemote zur
// Verfügung, um Instanzen des Standard-Interface IMWST, dargestellt
// von CoClass MWST, zu erzeugen. Diese Funktionen können
// von einem Client verwendet werden, der die CoClasses automatisieren
// will, die von dieser Typbibliothek dargestellt werden.
// *********************************************************************//
  CoMWST = class
    class function Create: IMWST;
    class function CreateRemote(const MachineName: string): IMWST;
  end;

implementation

uses ComObj;

class function CoMWST.Create: IMWST;
begin
  Result := CreateComObject(CLASS_MWST) as IMWST;
end;

class function CoMWST.CreateRemote(const MachineName: string): IMWST;
begin
  Result := CreateRemoteComObject(MachineName, CLASS_MWST) as IMWST;
end;

end.
Ich hoffe ich habe zur späten Stunde nicht alzu großen Kauderwelsch zusammgeschrieben.

Geändert von WizoHulk ( 8. Okt 2011 um 12:59 Uhr)
  Mit Zitat antworten Zitat