AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Typbibilothek importieren...D7 und D2006??
Thema durchsuchen
Ansicht
Themen-Optionen

Typbibilothek importieren...D7 und D2006??

Offene Frage von "winx"
Ein Thema von winx · begonnen am 6. Okt 2006 · letzter Beitrag vom 19. Okt 2006
Antwort Antwort
winx

Registriert seit: 14. Jun 2005
265 Beiträge
 
#1

Typbibilothek importieren...D7 und D2006??

  Alt 6. Okt 2006, 12:39
Hallo,

ich habe ein Problem nach dem Importieren einer Typbibiothek in D2006. Verschiedene Funktionen gehen irgendwie verloren. Ich
habe es getestet, indem ich in D7 und D2006, ein und diesselbe Typbibliothek importiert habe.

Diese sieht in D7 folgendermaßen aus

Delphi-Quellcode:
unit Mark_TLB;

// ************************************************************************ //
// WARNING
// -------
// The types declared in this file were generated from data read from a
// Type Library. If this type library is explicitly or indirectly (via
// another type library referring to this type library) re-imported, or the
// 'Refresh' command of the Type Library Editor activated while editing the
// Type Library, the contents of this file will be regenerated and all
// manual modifications will be lost.
// ************************************************************************ //

// PASTLWTR : 1.2
// File generated on 06.10.2006 12:34:43 from Type Library described below.

// ************************************************************************ //
// Type Lib: N:\develop\Mark V 2.00 Beta 5\Compiled\Mark.exe (1)
// LIBID: {31B21198-0674-4E92-A530-30733A0FF68F}
// LCID: 0
// Helpfile:
// HelpString: Mark Bibliothek
// DepndLst:
// (1) v2.0 stdole, (C:\WINDOWS\system32\STDOLE2.TLB)
// ************************************************************************ //
// *************************************************************************//
// NOTE:
// Items guarded by $IFDEF_LIVE_SERVER_AT_DESIGN_TIME are used by properties
// which return objects that may need to be explicitly created via a function
// call prior to any access via the property. These items have been disabled
// in order to prevent accidental use from within the object inspector. You
// may enable them by defining LIVE_SERVER_AT_DESIGN_TIME or by selectively
// removing them from the $IFDEF blocks. However, such items must still be
// programmatically created via a method of the appropriate CoClass before
// they can be used.
{$TYPEDADDRESS OFF} // Unit must be compiled without type-checked pointers.
{$WARN SYMBOL_PLATFORM OFF}
{$WRITEABLECONST ON}
{$VARPROPSETTER ON}
interface

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

// *********************************************************************//
// GUIDS declared in the TypeLibrary. Following prefixes are used:
// Type Libraries : LIBID_xxxx
// CoClasses : CLASS_xxxx
// DISPInterfaces : DIID_xxxx
// Non-DISP interfaces: IID_xxxx
// *********************************************************************//
const
  // TypeLibrary Major and minor versions
  MarkMajorVersion = 1;
  MarkMinorVersion = 0;

  LIBID_Mark: TGUID = '{31B21198-0674-4E92-A530-30733A0FF68F}';

  IID_IRemoteInterface: TGUID = '{0F24B5BF-F5B6-4F0D-9E0D-0FAB63EE4D88}';
  DIID_IRemoteInterfaceEvents: TGUID = '{7B013F03-6B4C-48B4-8B1B-D20EDCCE5298}';
  CLASS_RemoteInterface: TGUID = '{77CB394B-79AC-43A6-B492-4BA10126E3ED}';
type

// *********************************************************************//
// Forward declaration of types defined in TypeLibrary
// *********************************************************************//
  IRemoteInterface = interface;
  IRemoteInterfaceDisp = dispinterface;
  IRemoteInterfaceEvents = dispinterface;

// *********************************************************************//
// Declaration of CoClasses defined in Type Library
// (NOTE: Here we map each CoClass to its Default Interface)
// *********************************************************************//
  RemoteInterface = IRemoteInterface;


// *********************************************************************//
// Interface: IRemoteInterface
// Flags: (4416) Dual OleAutomation Dispatchable
// GUID: {0F24B5BF-F5B6-4F0D-9E0D-0FAB63EE4D88}
// *********************************************************************//
  IRemoteInterface = interface(IDispatch)
    ['{0F24B5BF-F5B6-4F0D-9E0D-0FAB63EE4D88}']
    function DoCommand(Cmd: Integer; Params: OleVariant; var Data: OleVariant): Integer; safecall;
  end;

// *********************************************************************//
// DispIntf: IRemoteInterfaceDisp
// Flags: (4416) Dual OleAutomation Dispatchable
// GUID: {0F24B5BF-F5B6-4F0D-9E0D-0FAB63EE4D88}
// *********************************************************************//
  IRemoteInterfaceDisp = dispinterface
    ['{0F24B5BF-F5B6-4F0D-9E0D-0FAB63EE4D88}']
    function DoCommand(Cmd: Integer; Params: OleVariant; var Data: OleVariant): Integer; dispid 201;
  end;

// *********************************************************************//
// DispIntf: IRemoteInterfaceEvents
// Flags: (4096) Dispatchable
// GUID: {7B013F03-6B4C-48B4-8B1B-D20EDCCE5298}
// *********************************************************************//
  IRemoteInterfaceEvents = dispinterface
    ['{7B013F03-6B4C-48B4-8B1B-D20EDCCE5298}']
    procedure OnMessage(const MessageText: WideString); dispid 201;
  end;

// *********************************************************************//
// The Class CoRemoteInterface provides a Create and CreateRemote method to
// create instances of the default interface IRemoteInterface exposed by
// the CoClass RemoteInterface. The functions are intended to be used by
// clients wishing to automate the CoClass objects exposed by the
// server of this typelibrary.
// *********************************************************************//
  CoRemoteInterface = class
    class function Create: IRemoteInterface;
    class function CreateRemote(const MachineName: string): IRemoteInterface;
  end;

  TRemoteInterfaceOnMessage = procedure(ASender: TObject; const MessageText: WideString) of object;


// *********************************************************************//
// OLE Server Proxy class declaration
// Server Object : TRemoteInterface
// Help String : RemoteInterface Objekt
// Default Interface: IRemoteInterface
// Def. Intf. DISP? : No
// Event Interface: IRemoteInterfaceEvents
// TypeFlags : (2) CanCreate
// *********************************************************************//
{$IFDEF LIVE_SERVER_AT_DESIGN_TIME}
  TRemoteInterfaceProperties= class;
{$ENDIF}
  TRemoteInterface = class(TOleServer)
  private
    FOnMessage: TRemoteInterfaceOnMessage;
    FIntf: IRemoteInterface;
{$IFDEF LIVE_SERVER_AT_DESIGN_TIME}
    FProps: TRemoteInterfaceProperties;
    function GetServerProperties: TRemoteInterfaceProperties;
{$ENDIF}
    function GetDefaultInterface: IRemoteInterface;
  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: IRemoteInterface);
    procedure Disconnect; override;
    function DoCommand(Cmd: Integer; Params: OleVariant; var Data: OleVariant): Integer;
    property DefaultInterface: IRemoteInterface read GetDefaultInterface;
  published
{$IFDEF LIVE_SERVER_AT_DESIGN_TIME}
    property Server: TRemoteInterfaceProperties read GetServerProperties;
{$ENDIF}
    property OnMessage: TRemoteInterfaceOnMessage read FOnMessage write FOnMessage;
  end;

{$IFDEF LIVE_SERVER_AT_DESIGN_TIME}
// *********************************************************************//
// OLE Server Properties Proxy Class
// Server Object : TRemoteInterface
// (This object is used by the IDE's Property Inspector to allow editing
// of the properties of this server)
// *********************************************************************//
 TRemoteInterfaceProperties = class(TPersistent)
  private
    FServer: TRemoteInterface;
    function GetDefaultInterface: IRemoteInterface;
    constructor Create(AServer: TRemoteInterface);
  protected
  public
    property DefaultInterface: IRemoteInterface read GetDefaultInterface;
  published
  end;
{$ENDIF}


procedure Register;

resourcestring
  dtlServerPage = 'Additional';

  dtlOcxPage = 'Additional';

implementation

uses ComObj;

class function CoRemoteInterface.Create: IRemoteInterface;
begin
  Result := CreateComObject(CLASS_RemoteInterface) as IRemoteInterface;
end;

class function CoRemoteInterface.CreateRemote(const MachineName: string): IRemoteInterface;
begin
  Result := CreateRemoteComObject(MachineName, CLASS_RemoteInterface) as IRemoteInterface;
end;

procedure TRemoteInterface.InitServerData;
const
  CServerData: TServerData = (
    ClassID: '{77CB394B-79AC-43A6-B492-4BA10126E3ED}';
    IntfIID: '{0F24B5BF-F5B6-4F0D-9E0D-0FAB63EE4D88}';
    EventIID: '{7B013F03-6B4C-48B4-8B1B-D20EDCCE5298}';
    LicenseKey: nil;
    Version: 500);
begin
  ServerData := @CServerData;
end;

procedure TRemoteInterface.Connect;
var
  punk: IUnknown;
begin
  if FIntf = nil then
  begin
    punk := GetServer;
    ConnectEvents(punk);
    Fintf:= punk as IRemoteInterface;
  end;
end;

procedure TRemoteInterface.ConnectTo(svrIntf: IRemoteInterface);
begin
  Disconnect;
  FIntf := svrIntf;
  ConnectEvents(FIntf);
end;

procedure TRemoteInterface.DisConnect;
begin
  if Fintf <> nil then
  begin
    DisconnectEvents(FIntf);
    FIntf := nil;
  end;
end;

function TRemoteInterface.GetDefaultInterface: IRemoteInterface;
begin
  if FIntf = nil then
    Connect;
  Assert(FIntf <> nil, 'DefaultInterface is NULL. Component is not connected to Server. You must call ''Connect'' or ''ConnectTo'' before this operation');
  Result := FIntf;
end;

constructor TRemoteInterface.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
{$IFDEF LIVE_SERVER_AT_DESIGN_TIME}
  FProps := TRemoteInterfaceProperties.Create(Self);
{$ENDIF}
end;

destructor TRemoteInterface.Destroy;
begin
{$IFDEF LIVE_SERVER_AT_DESIGN_TIME}
  FProps.Free;
{$ENDIF}
  inherited Destroy;
end;

{$IFDEF LIVE_SERVER_AT_DESIGN_TIME}
function TRemoteInterface.GetServerProperties: TRemoteInterfaceProperties;
begin
  Result := FProps;
end;
{$ENDIF}

procedure TRemoteInterface.InvokeEvent(DispID: TDispID; var Params: TVariantArray);
begin
  case DispID of
    -1: Exit; // DISPID_UNKNOWN
    201: if Assigned(FOnMessage) then
         FOnMessage(Self, Params[0] {const WideString});
  end; {case DispID}
end;

function TRemoteInterface.DoCommand(Cmd: Integer; Params: OleVariant; var Data: OleVariant): Integer;
begin
  Result := DefaultInterface.DoCommand(Cmd, Params, Data);
end;

{$IFDEF LIVE_SERVER_AT_DESIGN_TIME}
constructor TRemoteInterfaceProperties.Create(AServer: TRemoteInterface);
begin
  inherited Create;
  FServer := AServer;
end;

function TRemoteInterfaceProperties.GetDefaultInterface: IRemoteInterface;
begin
  Result := FServer.DefaultInterface;
end;

{$ENDIF}

procedure Register;
begin
  RegisterComponents(dtlServerPage, [TRemoteInterface]);
end;

end.
In Delphi 2006, sieht sie dagegen nur so aus:

Delphi-Quellcode:
unit Mark_TLB;

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

// PASTLWTR : 1.2
// Datei generiert am 06.10.2006 12:31:24 aus der unten beschriebenen Typbibliothek.

// ************************************************************************ //
// Typbib: N:\develop\Mark V 2.00 Beta 5\Compiled\Mark.exe (1)
// LIBID: {31B21198-0674-4E92-A530-30733A0FF68F}
// LCID: 0
// Hilfedatei:
// Hilfe-String: Mark Bibliothek
// DepndLst:
// (1) v2.0 stdole, (C:\WINDOWS\system32\STDOLE2.TLB)
// ************************************************************************ //
{$TYPEDADDRESS OFF} // Unit muss ohne Typueberpruefung fuer Zeiger compiliert werden.
{$WARN SYMBOL_PLATFORM OFF}
{$WRITEABLECONST ON}
{$VARPROPSETTER ON}
interface

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

// *********************************************************************//
// In dieser Typbibliothek deklarierte GUIDS . Es werden folgende
// Praefixe verwendet:
// Typbibliotheken : LIBID_xxxx
// CoClasses : CLASS_xxxx
// DISPInterfaces : DIID_xxxx
// Nicht-DISP-Interfaces: IID_xxxx
// *********************************************************************//
const
  // Haupt- und Nebenversionen der Typbibliothek
  MarkMajorVersion = 1;
  MarkMinorVersion = 0;

  LIBID_Mark: TGUID = '{31B21198-0674-4E92-A530-30733A0FF68F}';

  IID_IRemoteInterface: TGUID = '{0F24B5BF-F5B6-4F0D-9E0D-0FAB63EE4D88}';
  DIID_IRemoteInterfaceEvents: TGUID = '{7B013F03-6B4C-48B4-8B1B-D20EDCCE5298}';
  CLASS_RemoteInterface: TGUID = '{77CB394B-79AC-43A6-B492-4BA10126E3ED}';
type

// *********************************************************************//
// Forward-Deklaration von in der Typbibliothek definierten Typen
// *********************************************************************//
  IRemoteInterface = interface;
  IRemoteInterfaceDisp = dispinterface;
  IRemoteInterfaceEvents = dispinterface;

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


// *********************************************************************//
// Interface: IRemoteInterface
// Flags: (4416) Dual OleAutomation Dispatchable
// GUID: {0F24B5BF-F5B6-4F0D-9E0D-0FAB63EE4D88}
// *********************************************************************//
  IRemoteInterface = interface(IDispatch)
    ['{0F24B5BF-F5B6-4F0D-9E0D-0FAB63EE4D88}']
    function DoCommand(Cmd: Integer; Params: OleVariant; var Data: OleVariant): Integer; safecall;
  end;

// *********************************************************************//
// DispIntf: IRemoteInterfaceDisp
// Flags: (4416) Dual OleAutomation Dispatchable
// GUID: {0F24B5BF-F5B6-4F0D-9E0D-0FAB63EE4D88}
// *********************************************************************//
  IRemoteInterfaceDisp = dispinterface
    ['{0F24B5BF-F5B6-4F0D-9E0D-0FAB63EE4D88}']
    function DoCommand(Cmd: Integer; Params: OleVariant; var Data: OleVariant): Integer; dispid 201;
  end;

// *********************************************************************//
// DispIntf: IRemoteInterfaceEvents
// Flags: (4096) Dispatchable
// GUID: {7B013F03-6B4C-48B4-8B1B-D20EDCCE5298}
// *********************************************************************//
  IRemoteInterfaceEvents = dispinterface
    ['{7B013F03-6B4C-48B4-8B1B-D20EDCCE5298}']
    procedure OnMessage(const MessageText: WideString); dispid 201;
  end;

// *********************************************************************//
// Die Klasse CoRemoteInterface stellt die Methoden Create und CreateRemote zur
// Verfuegung, um Instanzen des Standard-Interface IRemoteInterface, dargestellt
// von CoClass RemoteInterface, zu erzeugen. Diese Funktionen koennen
// von einem Client verwendet werden, der die CoClasses automatisieren
// will, die von dieser Typbibliothek dargestellt werden.
// *********************************************************************//
  CoRemoteInterface = class
    class function Create: IRemoteInterface;
    class function CreateRemote(const MachineName: string): IRemoteInterface;
  end;

implementation

uses ComObj;

class function CoRemoteInterface.Create: IRemoteInterface;
begin
  Result := CreateComObject(CLASS_RemoteInterface) as IRemoteInterface;
end;

class function CoRemoteInterface.CreateRemote(const MachineName: string): IRemoteInterface;
begin
  Result := CreateRemoteComObject(MachineName, CLASS_RemoteInterface) as IRemoteInterface;
end;

end.
Ich benötige die TRemoteInterface.Connect Funktion, die jetzt allerdings nicht mehr vorhanden ist...kann ich diese
irgendwie ersetzen, oder wo liegt mein Fehler???

Danke für alle hilfreichen Tipps!!!

gruß,
winx

P.S: Hab das Thema auch hier gepostet
  Mit Zitat antworten Zitat
Benutzerbild von OldGrumpy
OldGrumpy

Registriert seit: 28. Sep 2006
Ort: Sandhausen
941 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Typbibilothek importieren...D7 und D2006??

  Alt 6. Okt 2006, 13:02
Zuerstmal, wie hast Du die Typelib erzeugt? Mittels TLIbImp oder aus der IDE heraus? Mit letzterem habe ich seit D2005 auch schlechte Erfahrungen gemacht.
In D2006 ist sogar der Helptext von TLibImp kaputt, da frage ich mich immer, ob der Output wenigstens stimmt.
"Tja ja, das Ausrufezeichen... Der virtuelle Spoiler des 21. Jahrhunderts, der Breitreifen für die Datenautobahn, die k3wle Sonnenbrille fürs Usenet. " (Henning Richter)
  Mit Zitat antworten Zitat
winx

Registriert seit: 14. Jun 2005
265 Beiträge
 
#3

Re: Typbibilothek importieren...D7 und D2006??

  Alt 6. Okt 2006, 13:12
Aus der IDE. Ich habe sie sowohl unter D2006 Win32 als auch .Net importiert.
Es hat beides mal geklappt. Nur eben fehlen die paar funkionen...
  Mit Zitat antworten Zitat
Benutzerbild von OldGrumpy
OldGrumpy

Registriert seit: 28. Sep 2006
Ort: Sandhausen
941 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Typbibilothek importieren...D7 und D2006??

  Alt 19. Okt 2006, 15:20
Dann probier doch mal, die Typelib manuell zu erstellen. Das dafür zuständige Programm heisst TLibImp.exe und ist im Unterverzeichnis BIN Deiner Delphi-Installation zu finden.

Die Parameter sind praktisch selbsterklärend, ich benutze meist folgendes:

tlibimp.exe -P+ -D<Pfad> -Hpa<name> -Hps<name> <exename>

<Pfad> ist das Verzeichnis in dem die *_TLB.pas abgelegt werden soll.
<name> ist der Name der Komponentenpalette auf der die Sachen aus der Typelib später zu finden sein sollen.
<exename> ist der Name der Datei die die Typelib enthält. Also der Exe, Dll, Ocx, tlb, usw.

Vergleich dann doch mal die beiden Dateien.
"Tja ja, das Ausrufezeichen... Der virtuelle Spoiler des 21. Jahrhunderts, der Breitreifen für die Datenautobahn, die k3wle Sonnenbrille fürs Usenet. " (Henning Richter)
  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 03:49 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