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.