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:
Ü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?
Du musst angemeldet sein, um einen Kommentar abzugeben.
ich habe festgestellt, dass auch. Sie sind leider beschränkt, was wurde Hinzugefügt, um die embedded-Typ-Bibliothek.
Es ist nicht Delphi "Schuld", und es gibt nichts, was Sie tun können, um es zu beheben.
Es sei denn, Sie möchten, erstellen Sie Ihren eigenen managed-DLL, die weiß, wie Sie zum aufrufen der Methoden verwaltet diese mit anderen verwalteten Bibliothek, und setzen Sie Sie selbst zu COM.
Dann die richtige Aufgabe zu verwenden die " registration-free COM der dll, so dass Sie nicht haben, um zu erzwingen Ihre Benutzer zu registrieren Ihre COM/managed dll.
Wir haben es getan mit Microsoft Große Mühe,. Wir erstellen unsere eigenen
.dll
in Visual Studio, die weiß, wie Sie das geschafft sich Große Mühe, code. Dann setzen alle diese Methoden, um COM.