Einzelnen Beitrag anzeigen

Barthiboy

Registriert seit: 4. Nov 2011
36 Beiträge
 
#1

.Net dll in Win32

  Alt 15. Jul 2015, 08:15
Hallo zusammen,

ich sitze jetzt schon seit geraumer Zeit an einem Problem.
Ich habe eine .Net dll bekommen und versuche diese unter Delphi einzubinden.
Hierfür habe ich wie gesagt die dll und auch eine .tlb

Mein Versuch bis jetzt war hier über den COM Experten eine Anbindung zu schaffen.
Hierbei ist die unten angeähngte ItacIms_TLB.pas
Allerdings fehlen hier die Methoden.
Es wurde zwar das interface _Mdata angelegt aber sonst auch schon nichts.

Ich hänge mal die dll und die tlb mit an. Vielleicht kann mir irgendwer hierbei helfen.
Es ist übrigens nur eine Testdll mit nur einer funktion.
Der Inhalt:

Code:
            ItacIms.Mdata mdata = new Mdata();
            string x = mdata.GetKuckuck();

            string y = mdata.GetInput("HUHU");
Ich danke für eure Hilfe
Gruß
Christian


Delphi-Quellcode:
unit ItacIms_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: 52393 $
// Datei am 15.07.2015 07:25:43 erzeugt aus der unten beschriebenen Typbibliothek.

// ************************************************************************ //
// Typbib.: C:\DelphiXE5\Projekte\NetTest\ItacIms.tlb (1)
// LIBID: {B2D883E2-3EF3-4AB8-9C36-C85205529531}
// LCID: 0
// Hilfedatei:
// Hilfe-String:
// Liste der Abhäng.:
// (1) v2.0 stdole, (C:\Windows\SysWOW64\stdole2.tlb)
// (2) v2.4 mscorlib, (C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.tlb)
// SYS_KIND: SYS_WIN32
// ************************************************************************ //
{$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 Winapi.Windows, mscorlib_TLB, System.Classes, System.Variants, System.Win.StdVCL, Vcl.Graphics, Vcl.OleServer, Winapi.ActiveX;
  

// *********************************************************************//
// 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
  ItacImsMajorVersion = 1;
  ItacImsMinorVersion = 0;

  LIBID_ItacIms: TGUID = '{B2D883E2-3EF3-4AB8-9C36-C85205529531}';

  IID__Mdata: TGUID = '{36653466-CC12-3A69-9F48-E0366930357A}';
  CLASS_Mdata: TGUID = '{976229DF-F00C-3A19-9D4D-0A54213B2014}';
type

// *********************************************************************//
// Forward-Deklaration von in der Typbibliothek definierten Typen
// *********************************************************************//
  _Mdata = interface;
  _MdataDisp = dispinterface;

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


// *********************************************************************//
// Interface: _Mdata
// Flags: (4432) Hidden Dual OleAutomation Dispatchable
// GUID: {36653466-CC12-3A69-9F48-E0366930357A}
// *********************************************************************//
  _Mdata = interface(IDispatch)
    ['{36653466-CC12-3A69-9F48-E0366930357A}']
  end;

// *********************************************************************//
// DispIntf: _MdataDisp
// Flags: (4432) Hidden Dual OleAutomation Dispatchable
// GUID: {36653466-CC12-3A69-9F48-E0366930357A}
// *********************************************************************//
  _MdataDisp = dispinterface
    ['{36653466-CC12-3A69-9F48-E0366930357A}']
  end;

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


// *********************************************************************//
// OLE-Server-Proxy-Klassendeklaration
// Server-Objekt : TMdata
// Hilfe-String :
// Standard-Interface: _Mdata
// Def. Intf. DISP? : No
// Ereignis-Interface:
// TypeFlags : (2) CanCreate
// *********************************************************************//
  TMdata = class(TOleServer)
  private
    FIntf: _Mdata;
    function GetDefaultInterface: _Mdata;
  protected
    procedure InitServerData; override;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    procedure Connect; override;
    procedure ConnectTo(svrIntf: _Mdata);
    procedure Disconnect; override;
    property DefaultInterface: _Mdata read GetDefaultInterface;
  published
  end;

procedure Register;

resourcestring
  dtlServerPage = 'ActiveX';

  dtlOcxPage = 'ActiveX';

implementation

uses System.Win.ComObj;

class function CoMdata.Create: _Mdata;
begin
  Result := CreateComObject(CLASS_Mdata) as _Mdata;
end;

class function CoMdata.CreateRemote(const MachineName: string): _Mdata;
begin
  Result := CreateRemoteComObject(MachineName, CLASS_Mdata) as _Mdata;
end;

procedure TMdata.InitServerData;
const
  CServerData: TServerData = (
    ClassID: '{976229DF-F00C-3A19-9D4D-0A54213B2014}';
    IntfIID: '{36653466-CC12-3A69-9F48-E0366930357A}';
    EventIID: '';
    LicenseKey: nil;
    Version: 500);
begin
  ServerData := @CServerData;
end;

procedure TMdata.Connect;
var
  punk: IUnknown;
begin
  if FIntf = nil then
  begin
    punk := GetServer;
    Fintf:= punk as _Mdata;
  end;
end;

procedure TMdata.ConnectTo(svrIntf: _Mdata);
begin
  Disconnect;
  FIntf := svrIntf;
end;

procedure TMdata.DisConnect;
begin
  if Fintf <> nil then
  begin
    FIntf := nil;
  end;
end;

function TMdata.GetDefaultInterface: _Mdata;
begin
  if FIntf = nil then
    Connect;
  Assert(FIntf <> nil, 'DefaultInterface ist NULL. Die Komponente ist nicht mit dem Server verbunden. Sie müssen vor dieser Operation "Connect" oder "ConnectTo" aufrufen');
  Result := FIntf;
end;

constructor TMdata.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
end;

destructor TMdata.Destroy;
begin
  inherited Destroy;
end;

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

end.
  Mit Zitat antworten Zitat