Wie kann man einen vector an eine Methode als Parameter übergeben?



  • Hi,

    ich schreibe gerade eine automation DLL (MFC).

    Ich möchte einer bestehenden Klasse eine Methode hinzufügen,
    der als Parameter einen vector übergeben werden soll.

    Hat irgendwer eine Idee?
    Danke.



  • typedef sollte helfen. 🙂



  • Wie soll das funktionieren?
    Hast Du ein Beispiel?

    Also. Mein Problem ist, dass beim Anlegen einer neuer Methode der Datentyp mitangegen werden muss. Würde LONG ausgewählt, sähe das in so aus:

    afx_msg BOOL Draw(long Wert);
    DISP_FUNCTION(Epam_Button, "Draw", Draw, VT_BOOL, VTS_I4)

    Da man aber kein Vector auswählen kann, meine Frage nun, wie kann man einen
    vector als Parameter übergeben?

    Gruß



  • Oh, dann bin ich raus, das sieht so fremd aus. 😞



  • Vielleicht könnte man ja in dem long Wert einen Pointer (Referenz) auf den vector unterbringen.



  • Ich muss aber in der Methode auf die einzelnen Elemente des vectors zugreifen. Keine Ahnung, wie das mit einem Pointer gehen soll 😞



  • Du weißt aber was nen Pointer ist?! Und wofür steht: VTS_I4?



  • Also mir qualmt die Birne, dass man's aus'm Weltraum beobachten könnte 🙂

    Aber ich glaube die Lösung gefunden zu haben aaalso:

    // Struct aus dem Header
    
    typedef struct
    {
    	CString FirstName;
    	CString AltName;
    	CString Index;
    	COLORREF Color;
    } TUserColor;
    
    //Methode "Build" aus Klasse "Builder" übergibt den Vector an Methode "Draw" aus Klasse "Epam_Button"
    
    BOOL Builder::Build(long DestHDC)
    {
    	Epam_Button *cButton = new Epam_Button; // Erzeuge Instanz von Klasse "Epam_Button"
    	cButton->Draw((long*) &m_UserColor); // Übergebe Pointer von vector<TUserColor>
    	delete cButton; // vernichte Instanz
    } 
    
    void Epam_Button::Draw(long FAR* User) 
    {
    	vector<TUserColor> UserB = (vector<TUserColor>&) *User; // Cast auf vector<TUserColor> unter Angabe des Pointers
    	AfxMessageBox( UserB[0].AltName ,0,0 ); // siehe da es funzt :p 
    }
    

    Was meint ihr dazu?



  • auauauauauAUAUAU.

    Du kannst in einer -> automation <- DLL doch keinen std::vector übergeben.
    Zumindest macht es überhaupt garkeinen Sinn, denn es wäre dann wohl schwerlich noch automation kompatibel. Nen?

    Du kannst ein SAFEARRAY nehmen, oder nen Pointer + Länge übergeben. Beim Pointer schreibst du dann das "length_is" Attribut dazu, und fertig.
    Ersteres ist wirklich voll automation kompatibel, zweiteres tuts zumindest für automatisches wire-marshalling (DCOM etc.).



  • Ich habe insgeheim gehofft, dass jemand mein Ergebnis kritisiert.
    Wäre auch zu schön gewesen...

    Also, ich habe erst vor 4 Wochen mit C++ (Mfc) angefangen. Und habe jahrelange Erfahrung mit VB6.0.

    Warum kann man kein std::vector in einer automation DLL übergeben? Was macht kein Sinn?

    Das mit dem Pointer + Länge hört sich gut an.

    Kannst Du mir bitte ein Beispiel posten?

    Vielen Dank für deine Hilfe.


Anmelden zum Antworten