2009-08-07 7 views
0

Dies ist, was ich tue: Ich bin derzeit erforderlich, eine .NET-Assembly in Delphi zu öffnen und zu verwenden. Die Assembly, die ich verwenden möchte, hat auch eine Gruppe von Objekten, die sie benutzt. Ich konnte regasm verwenden, um eine Typbibliothek für die Hauptbaugruppe zu erstellen. Ich war auch in der Lage, einen SN zu vergeben und ihn beim GAC zu registrieren.Keine Methoden aus importierter Typbibliothek in Delphi

Wenn ich jetzt versuche, die Typbibliothek in Delphi zu importieren, nachdem die PAS-Datei erstellt wurde, werden keine Methoden in der PAS-Datei angezeigt. Ich kann zufällige create-Methoden sehen, aber keine der ursprünglichen Methoden, die ich in der C# -Version erstellt habe. Ich kann mir nicht vorstellen, was das Problem sein könnte, das dies zum Scheitern bringt. Irgendwelche Ideen?

+0

ich die Versammlung ComVisible gesetzt haben, ich die einzelnen Methoden zu ComVisible Einstellung sogar versucht. Das hat nicht funktioniert. –

+0

Das Original wurde gelöscht, da es keine Antwort erhalten hat und die gleichen Informationen enthält. –

Antwort

1

Das gesamte COM-System dreht sich um Schnittstellen. Im Grunde müssen Sie Ihre Klassen in der Assembly ändern, um Schnittstellen zu implementieren, die die Methoden enthalten, die Sie aufrufen möchten. Sie können dann eine Instanz jeder Klasse in der Assembly als Schnittstelle aus Delphi erstellen und die Methoden auf diese Weise aufrufen.

Zum Beispiel:

// In the assembly 
public interface IMyInterface 
{ 
    void DoSomething(); 
} 

public class MyImplementingClass : IMyInterface 
{ 
    void DoSomething() 
    { 
     // 
    } 
} 

jetzt Ihre PAS-Datei wird eine Schnittstelle Erklärung einschließlich der DoSomething Methode erhalten, und ein paar GUIDs.

Um diese Methode von Delphi aufrufen, Sie Code ähnlich wie diese verwenden würde:

procedure CallDoSomething; 
var 
    hr: HResult; 
    Intf: IMyInterface; 
    TypeLib: ITypeLib; 
begin 
    OLECHECK(LoadRegTypeLib(LIBID_MyAssembly, MyAssemblyMajorVersion, MyAssemblyMinorVersion, 0, TypeLib)); 

    Intf := nil; 
    hr := CoCreateInstance(CLASS_MyImplementingClass, nil, CLSCTX_INPROC_SERVER, IID_IMyInterface, Intf); 
    if Failed(hr) then 
    raise Exception.CreateFmt('Failed to create instance of interface. (%x)', [hr]); 

    Intf.DoSomething(); 
end; 
+0

Ich ging und schuf eine Test-Assembly zu Mimmic Ihr. Und die PAS-Datei create hat die GUIDs, hat aber nicht die Methode DoSomething. –

+0

Enthält die PAS-Datei die Interface-Deklaration? –

Verwandte Themen