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.