Importieren einer .NET-assembly type library in Delphi nicht erzeugen die Verfahren

Ich versuche, Zugriff auf eine .NET-assembly (Position.dll) in Delphi durch den Import als eine COM-Typ-Bibliothek. Alles scheint zu importieren, OK, aber die daraus resultierenden Position_TLB.pas-Datei enthält nur die Funktionen zum erstellen der Klassen. Keiner der Klasse Methoden oder Delegierten importiert werden.

Hier ist, was ich Tue.

1) Beurteilung der Position.dll assembly in den GAC.

gacutil.exe -i Position.dll

2) Registrieren Sie die assembly

regasm.exe Position.dll

3) Importieren Sie die assembly in Delphi als eine Art Bibliothek

Alle importierten Klassen wie folgt Aussehen:

  IID__MyClass: TGUID = '{F53EAE3D-9EB8-1111-B1F7-5DB609FDBEAE}';
  CLASS_MyClass: TGUID = '{E15581CD-FFF5-34CE-3434-D5484798900F}';

...

  _MyClass = interface;
  _MyClassDisp = dispinterface;
  MyClass = _MyClass;

// *********************************************************************//
// Interface: _MyClass
// Flags:     (4432) Hidden Dual OleAutomation Dispatchable
// GUID:      {F53EAE3D-9EB8-1111-B1F7-5DB609FDBEAE}
// *********************************************************************//
  _MyClass = interface(IDispatch)
    ['{F53EAE3D-9EB8-1111-B1F7-5DB609FDBEAE}']
  end;

...

// *********************************************************************//
// DispIntf:  _MyClassDisp
// Flags:     (4432) Hidden Dual OleAutomation Dispatchable
// GUID:      {F53EAE3D-9EB8-3538-B1F7-5DB609FDBEAE}
// *********************************************************************//
  _MyClassDisp = dispinterface
    ['{F53EAE3D-9EB8-1111-B1F7-5DB609FDBEAE}']
  end;

...

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

...

class function CoMyClass.Create: _MyClass;
begin
  Result := CreateComObject(CLASS_MyClass) as _MyClass;
end;

class function CoMyClass.CreateRemote(const MachineName: string): _MyClass;
begin
  Result := CreateRemoteComObject(MachineName, CLASS_MyClass) as _MyClass;
end;

MyClass enthalten sollte verschiedene Methoden und Delegaten, die sind nirgends zu sehen in der TLB-Datei.

Hier ist, was ich sehe, wenn ich versuche, code-Vervollständigung, in der Klasse:

Importieren einer .NET-assembly type library in Delphi nicht erzeugen die Verfahren

Übersehe ich etwas offensichtliches?

  • Haben Sie erklären beide [ComVisible(true)] und [ClassInterface(ClassInterfaceType.AutoDual)] Attribute für deine Klasse?
  • Ich habe keinen Zugriff auf die Quelle. Es ist eine Drittanbieter-DLL.
  • Wenn die assembly exportiert nicht die class-Methoden für die COM zugreifen, dann hast du Pech, es sei denn, Sie verwenden eine Drittanbieter-Frameworks wie CrossTalk.
  • Ich bin derzeit sprechen die Autoren von der Montage. können Sie bereit sein, fügen Sie den code zum exportieren der Klasse Methoden, um COM. Kann jemand ein Beispiel geben, wie es zu tun? Ist es so einfach wie das hinzufügen [ComVisible(true)] und [ClassInterface(ClassInterfaceType.AutoDual)] als TOndrej erwähnt?
  • Kommentar entpuppte sich als die richtige Antwort. Die Autoren der dll habe die änderungen vorgenommen und die Montage nun importiert. kannst du deinen Kommentar als Antwort und ich werde es akzeptieren?
InformationsquelleAutor norgepaul | 2012-05-03
Schreibe einen Kommentar