mschlegel
Erfahrenes Mitglied
Hi
Wir haben eine etwas ältere Anwendung die in Delphi 2006 geschrieben ist. Wir wollen aber das ganze Projekt bald auf .NET umstellen (hoffentlich innerhalb des nächsten Jahres) und haben deshalb schon einmal begonnen die Berichte auf MS Reporting Service umzustellen. Um diese anzuzeigen haben wir eine ClassLibrary die entweder über .NET oder über COM angesprochen werden kann.
Für die COM-Schnittstelle habe ich ein Interface welches eigentlich nur eine Methode beinhaltet und eine Klasse die dieses und ein weiteres Iterfaces implementiert.
Lange Rede kurzer Sinn, die TypeLibrary für Delphi wird erfolgreich erzeugt und der Delphi-Code zum instanziieren des COM-Objektes wird erfolgreich kompiliert. Allerdings bekomme ich zur Laufzeit die Meldung dass die Komponente mit der GUID ... nicht gefunden werden kann. Die GUID entspricht der GUID die ich in meiner Klasse eingetragen habe.
das Interface
die implementierende Klasse
Um die DLL zu registrieren rufe ich regasm bla.dll /tlb /codebas auf und nach noch gacutil -i bla.dll. Eigentlich sollte das Ding doch dann gefunden werden?
Wir haben eine etwas ältere Anwendung die in Delphi 2006 geschrieben ist. Wir wollen aber das ganze Projekt bald auf .NET umstellen (hoffentlich innerhalb des nächsten Jahres) und haben deshalb schon einmal begonnen die Berichte auf MS Reporting Service umzustellen. Um diese anzuzeigen haben wir eine ClassLibrary die entweder über .NET oder über COM angesprochen werden kann.
Für die COM-Schnittstelle habe ich ein Interface welches eigentlich nur eine Methode beinhaltet und eine Klasse die dieses und ein weiteres Iterfaces implementiert.
Lange Rede kurzer Sinn, die TypeLibrary für Delphi wird erfolgreich erzeugt und der Delphi-Code zum instanziieren des COM-Objektes wird erfolgreich kompiliert. Allerdings bekomme ich zur Laufzeit die Meldung dass die Komponente mit der GUID ... nicht gefunden werden kann. Die GUID entspricht der GUID die ich in meiner Klasse eingetragen habe.
das Interface
C#:
[assembly: AssemblyKeyFile("DynamicreportViewer.snk")] // GAC
namespace Stiki.DynamicReportViewer
{
[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
[Guid("A6659361-1625-5555-931C-36014B146679")]
public interface ICOMReportViewer
{
void ShowReport(string reportName, String[]parameters);
}
}
die implementierende Klasse
C#:
namespace Stiki.DynamicReportViewer
{
// Don't generate class interface - inheritance using interfaces!
[ClassInterface(ClassInterfaceType.None)]
[Guid("C6659361-1625-4746-931C-36014B146679")] // <----- Diese GUID wird nicht gefunden
[ComVisible(true)]
[ProgId("Stiki.DynamicReportViewer.ReportViewer")]
public class ReportViewer : IReportViewer, ICOMReportViewer
{
private static ReportViewer singleton;
private ReportViewer() { }
public static ReportViewer GetReportViewer()
{
if (singleton == null)
singleton = new ReportViewer();
return singleton;
}
void ICOMReportViewer.ShowReport(string reportName, String[]parameters)
{
// tue dies und das
}
}// end class
}
Um die DLL zu registrieren rufe ich regasm bla.dll /tlb /codebas auf und nach noch gacutil -i bla.dll. Eigentlich sollte das Ding doch dann gefunden werden?