COM: std::map zurück geben.....



  • Hi,

    bisher habe ich mit C++ nur einfache COM Server erzeugen müssen, die Grund-Datentypen zurück geben. Nun aber habe ich mal etwas ekliges zurück zu geben:

    class CCanCollectorObject
    {
    public:
    std::vector<CCanPackage> m_vRcvObjs;
    //hier kommen evtl. später noch ein paar Grund-Datentypen
    };
    

    mit

    class CCanPackage
    {
    public:
    unsigned long m_ulCanID;
    byte m_byDLC;
    byte m_barrCandata[8];
    };
    

    (alternativ könnte ich hier auch struct's nehmen)

    Ein Aufruf der Art ...->GetData vom Client in den COM Server soll mir nun das vom COM-Server zurück geben:

    std::map<unsigned long, CCanCollectorObject>
    

    Geht sowas? Kennt die IDL STL-maps und -vectoren und eigene Klassendefinitionen? Sicher muss hier irgendwas mit VARIANT gemacht werden und das ganze durch Hilfs-Funktionen und eklige Detaches/Casts überführt werden? Oder ist das am Ende etwa ganz unmöglich?

    Gibts hier Experten, die sich mit solch verzwackten Dingen auskennen? In der Literatur ja selbst im Internet findet man so schnell nix einigermassen passendes dazu...

    Danke und Gruss,

    Holgi


  • Mod

    Nein! So etwas geht nicht direkt.

    Ich würde eine neue COM-Objektklasse bauen für CCanPackage.
    Dann in Item Funktion für den Zugriff, die Dir das entsprechende Objekt zurückgibt. Dazu entsprechende Accessor für die Eigenschaften.

    Die einfache (aber nicht so elegenate) Vaiante würde einfach nur einen SafeArraymit entsprechenden VARIANTS verwenden.


Anmelden zum Antworten