CLS-Konforme Klasse erstellen



  • Jochen Kalmbach schrieb:

    Kann LAB-View .NET?

    Zumindest die Version 8.6 die ich hier einsetze kann es.



  • Hmmm. Nützt es etwas, die Klasse mit [System::CLSCompliant(true)] und dann alle non-konformen Members mit dem Attribut [System::CLSCompliant(false)] zu markieren? Vielleicht weiss die andere Applikation dann, welche Member für sie relevant sein dürfen und ignoriert den Rest...



  • Hmm ok, hab es gerade ausprobiert einfach mal alle Module mit [assembly:CLSCompliant(true)] makiert.

    Es wird weiter fehlerfrei compliert ... hmm nun bin ich ratlos.



  • Kannst Du mal vielleicht grob Dein PROBELM beschreiben?



  • Ok versuche ich es mal zu erklären!
    Am besten geht das in diesem Fall mit ein paar Bildchen: 1 2 3
    Bild 1 und 2 zeigen das Hauptproblem, Bild 3 zeigt wie es im Prinzip aussehen müsste. Das was ihr da seht ist LabVIEW

    Wie weiter oben erwähnt bietet LabVIEW die Möglichkeit .NET-Assemblys einzubinden und jede öffentliche Methode aufzurufen, bzw. WindowsForms direkt in die eigene Benutzeroberfläche zu integrieren.

    Was ich nun machen will ist folgendes. Ich schreibe in VC++ eine .NET-Komopnente die Bilder von einer Webcam über DirectShow einliest, analysiert und anzeigt. LabVIEW soll nun über eine Methode die Ergebnisse der Analyse abfragen und auswerten.

    Nun zum eigentlichen Problem: Ich habe die .NET-Komponente bereits soweit das Bilder über DirectShow eingelesen und angezeigt werden. Ich bin jetzt an einem Punkt wo ich zum ersten mal versuchen will die Komponente in LabVIEW zu integrieren.
    Wie in Bild 1 und 2 zu sehen gibt LabVIEW mir nicht wirklich Aufschluss darüber was an meinem Programm nicht richtig ist, so bin ich nun am rätseln was falsch ist.

    Nach ein wenig Recherche bin ich dann über die CLS-Kompatibilät gestolpert, hab mir meinen Quelltext angesehen und dachte mir diese vielen Zeiger sind doch sicherlich nicht CLS-Konform zumal sie ja auch noch auf Strukturen zeigen die aus dem unmanged DirectShow stammen.
    Das ganze führte mich dann zu diesem Beitrag hier.

    Die Tasache das der Compiler trotz [assembly:CLSCompliant(true)] keine Fehler ausspuckt, wiederlegt nun meine Annahme, dass das Programm nicht CLS-Konform ist.

    So und was nun ?

    MfG
    Marco



  • mscorlib.dll ist auch nicht CLS-Konform!
    Verwende den "Fusion Log Viewer" aus dem Windows SDK um den Fehler zu finden.

    Vermutlich hast Du das Manifest für die CRT vergessen oder sonst etwas stimmt nicht.



  • Ahh danke werde ich gleich mal ausprobieren.
    Hab auch noch ein wenig rumprobiert. Ich habe einfach mal ein kleines Programm erstellt und es hinbekommen das LabVIEW es nicht mehr akzeptiert, es reicht aus in den Projekt-Einstelluneg von /clr:pure auf /clr umzustellen.

    Ich kann mein Projekt aber nicht auf /clr:pure stellen weil ich
    comutil.h inkludiert habe.

    Die brauche ich aber z.B. für CoCreateInstance(...)

    Ich habe auf der Suche nach Beispielen für Applikationen mit DirectShow immer mal wieder was von COM-Interop gelesen.
    Kann es sein das dies evtl. die Lösung für mein Problem sein kann?

    MfG
    Marco



  • Vermutlich darf die Assembly nur MSIL-Code enthalten... und das macht sie mit /clr nun mal nicht...
    Siehe: Gewusst wie: Migrieren auf /clr:pure
    http://msdn.microsoft.com/de-de/library/ms173253

    Ich empfehle Dir: Schreibe Deine Assembly in C#! Da kannst Du eigentlich fast alles machen, was Du willst. Du kannst auch mit COM-Objekten arbeiten.



  • Also normalerweise sollte LabView Klassen die mit /clr erstellt wurden verwenden können.

    Ich kann zwar kein LabView, aber ich weiß, das ein Kunde von uns eine mit VC 2005 und /clr erstellte DLL, die eigentlich für C# gedacht ist, mit mit LabView verwendet. Allerdings nicht mit 8.6 sondern etwas älterem.



  • NI scheint das geändert zu haben, wenn ich einfach nur nen neues WindowsForms-Projekt anlege und compiliere ist für LabVIEW alles in Ordnung, stelle ich nur den Schalter von /clr:pure auf /clr um geht es nicht mehr.

    Jochen Kalmbach schrieb:

    Ich empfehle Dir: Schreibe Deine Assembly in C#! Da kannst Du eigentlich fast alles machen, was Du willst. Du kannst auch mit COM-Objekten arbeiten.

    Ja den Gedanken hatte ich auch schon. Habe mir auch schon das Openbook von GalileoComputing runtergeladen, weil ich die Syntax von C# noch nicht kenne.
    COM wird da allerdings auch nicht behandelt, kennst du vielleicht ein paar gute Links wo es gut beschrieben wird?

    MfG
    Marco


Anmelden zum Antworten