2017-02-17 1 views
-1

In C# habe ich eine Klasse und ihre Schnittstelle in meiner Lösung, und ich möchte, dass sie COM sichtbar sind.Delphi 7 generiert keine COM-Klassen beim Importieren der Typbibliothek

ich habe:

  1. die Schnittstelle erstellt und die Klasse, wie folgend:

    [InterfaceType(ComInterfaceType.InterfaceIsDual), Guid("0D1ABB24-144E-4C88-A4A5-DC3ED0E61BEB")] 
    [ComVisible(true)] 
    public interface IMyInterface 
    { 
        // methods here 
    } 
    
    [ClassInterface(ClassInterfaceType.None), Guid("01AA5822-83D1-42C6-A578-C9A84AB836AA")] 
    [ComVisible(true)] 
    public class MyClass : IMyInterface 
    { 
        // implementation here 
    } 
    

    (beachten sie sind beide COM sichtbar)

  2. eine GUID generiert und informiert es in die Montage Info:

    [assembly: Guid("MY-GUID-HERE")] 
    
  3. es mit dieser Befehlszeile Registriert:

    c:\regasm.exe /tlb MyAssembly.Dll 
    
  4. die Typbibliothek in Delphi importiert 7.

Eine Einheit erzeugt wird, aber es die Klasse und Funktionen/Prozeduren nicht enthalten. Beim Aufruf von CoClass.Create wurde der Fehler "Klasse nicht registriert" zurückgegeben.

Später habe ich eine neue Lösung mit einer Klassenbibliothek erstellt, die oben genannten Operationen ausgeführt, und die Klassen/Methoden generiert und ich konnte darauf zugreifen.

Gibt es irgendwelche Tipps, was ich verpasst haben könnte?

+0

Sie sollten versuchen, die Option/codebase zu Ihrem Befehl regasm hinzuzufügen. Außerdem müssen Ihre DLL und Ihr Delphi-Projekt sowohl 32-Bit als auch beide 64-Bit sein. Ich versuche normalerweise, Registrierung der DLL zu testen, indem Sie ein VBS-Skript verwenden, um das Objekt zu erstellen. Wenn Sie eine 32-Bit-DLL erstellen, müssen Sie sicher sein, die Datei cscript.exe oder wscript.exe in c: \ windows \ syswow64 zu verwenden - unter der Annahme eines 64-Bit-Betriebssystems. –

+1

Verwenden Sie auch Oleview, um zu versuchen, die generierte TLB-Datei zu öffnen, um zu sehen, wie sie aussieht - vorausgesetzt, Sie haben ein visuelles Studio. Ich kenne die Tools, mit denen Delphi ausgeliefert wird, nicht. –

Antwort

0

Ich fand den Unterschied. Eine TLB-Klasse, die ich exportieren wollte, hatte einige Konstruktoren in einer Region. Als ich es erweiterte, sah ich, dass es keinen überladenen Konstruktor ohne Parameter gab. Nachdem ein Konstruktor ohne Argumente hinzugefügt wurde, war er in Delphi sichtbar und ich konnte ihn normal verwenden.

Verwandte Themen