Ein VARIANT Array mit BSTR Werten erstellen...
-
Hallo,
kann mir jemand helfen, wie ich ein VARIANT Array of BSTR erstelle?
ALso ich hab schon einiges versucht, aber es haut als nicht hin...Das war bis jetzt meine Lösung dazu...vielleicht hab ich da ja ein Denkfehler drin und einer entdeckt ihn...
VARIANT v; SAFEARRAYBOUND rgb [] = { 1, 0 }; v.vt = VT_ARRAY | VT_BSTR; // Array of BSTR // Now call SafeArrayCreate with type, dimension, // and pointer to vector of dimension descriptors v.parray = SafeArrayCreate(VT_BSTR, 1, rgb); VARIANT tmp; tmp.vt = VT_BSTR; tmp.bstrVal = (objRole.GetObjectID()).AllocSysString(); //Diese Methode gibt mir ein BSTR zurück SafeArrayPutElement(v.parray,&ix,(void *)&tmp); //Setzen der Attribute RpAttribute.SetAssociation(&v);
..ansonsten immer her mit anderen Vorschlägen, wie man das generell macht...vielleicht geht so was auch einfacher...bin noch neu auf dem Gebiet...
Gruss,
chullain
-
chullain schrieb:
Hallo,
kann mir jemand helfen, wie ich ein VARIANT Array of BSTR erstelle?
ALso ich hab schon einiges versucht, aber es haut als nicht hin...Das war bis jetzt meine Lösung dazu...vielleicht hab ich da ja ein Denkfehler drin und einer entdeckt ihn...
VARIANT v; SAFEARRAYBOUND rgb [] = { 1, 0 }; v.vt = VT_ARRAY | VT_BSTR; // Array of BSTR // Now call SafeArrayCreate with type, dimension, // and pointer to vector of dimension descriptors v.parray = SafeArrayCreate(VT_BSTR, 1, rgb); VARIANT tmp; tmp.vt = VT_BSTR; tmp.bstrVal = (objRole.GetObjectID()).AllocSysString(); //Diese Methode gibt mir ein BSTR zurück SafeArrayPutElement(v.parray,&ix,(void *)&tmp); //Setzen der Attribute RpAttribute.SetAssociation(&v);
..ansonsten immer her mit anderen Vorschlägen, wie man das generell macht...vielleicht geht so was auch einfacher...bin noch neu auf dem Gebiet...
Gruss,
chullain
du kannst ATL benutzen :
#include "atlsafe.h" ... CComSafeArray<BSTR> sa(CComSafeArrayBound(1, 0)); sa.SetAt(0, CComBSTR("111")); //oder so sa.SetAt(0, (objRole.GetObjectID()).AllocSysString(), FALSE); //oder so sa.SetAt(0, objRole.GetObjectID());
-
ssm schrieb:
du kannst ATL benutzen :
ja, gut, schon mal danke für die Antwort, aber es entsteht folgendes Problem, der Compiler kann diese Header Datei nicht finden und dann wollte ich fragen, wie kriege ich dann mein SafeArray in das Variant rein?
Gruss,
chullain
-
chullain schrieb:
ja, gut, schon mal danke für die Antwort, aber es entsteht folgendes Problem, der Compiler kann diese Header Datei nicht finden
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/vcrefATLReference.asp
chullain schrieb:
und dann wollte ich fragen, wie kriege ich dann mein SafeArray in das Variant rein?
[cpp]
CComSafeArray<BSTR> sa(CComSafeArrayBound(1, 0));
sa.SetAt(0, CComBSTR("111"));VARIANT var;
CComVariant comVar(sa);
comVar.Detach(&var);
[/cpp]
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum MFC mit dem Visual C++ verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
...sorry, aber ich müsste nochmal nachhacken, nachdem ich die ATL Reference durchgeguckt habe, konnte ich kein Eintrag zu meinem Problem finden...
...nachdem ich die atlsafe.h include, kommt eine Fehlermeldung, dass er diese Datei nicht finden kann...weisst Du nicht zufällig, warum die nicht findet?
Gruss,
chullain
-
chullain schrieb:
...sorry, aber ich müsste nochmal nachhacken, nachdem ich die ATL Reference durchgeguckt habe, konnte ich kein Eintrag zu meinem Problem finden...
...nachdem ich die atlsafe.h include, kommt eine Fehlermeldung, dass er diese Datei nicht finden kann...weisst Du nicht zufällig, warum die nicht findet?
Gruss,
chullain
was für einen Compiler hast du?
-
MS VC++ 6.0...
-
chullain schrieb:
MS VC++ 6.0...
http://msdn.microsoft.com/vstudio/downloads/updates/sp/vs6/sp6/default.aspx
-
Das hat nicht funktioniert...
...anscheinend, wie ich nachgelesen habe, ist atlsafe.h in ATL7 vorhanden und dieses wird in Visual Studio eingesetzt...
...vielleicht hast Du ja den Header, dann kannst Du ihn mir bitte zuschicken...würd mich freuen...
gruss,
chullain
-
chullain schrieb:
Das hat nicht funktioniert...
...anscheinend, wie ich nachgelesen habe, ist atlsafe.h in ATL7 vorhanden und dieses wird in Visual Studio eingesetzt...als MSVC instaliert wurde, hast du Active Template Library(ATL) gewählt? Du kannst dein MSVC Installationprogramm neu starten und ATL Lib installieren.
chullain schrieb:
...vielleicht hast Du ja den Header, dann kannst Du ihn mir bitte zuschicken...würd mich freuen...
ich kann es machen, aber ich hab MSVC.NET && ATL 7 und ich weiß genau nicht, ob es bei dir gehen wird.
pribier mal zuerst mit der Installation
-
versuch es ohne ATL:
// bounds && create SAFEARRAYBOUND rgb [] = { 1, 0 }; SAFEARRAY *pSA = SafeArrayCreate(VT_BSTR, 1, rgb); // fill && put BSTR tstBSTR; LONG rgIndices = 0; SafeArrayPutElement(pSA, &rgIndices, &tstBSTR); // Initialize and fill the SafeArray VARIANT vsa; vsa.vt = VT_BSTR | VT_ARRAY; V_ARRAY(&vsa) = pSA;