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...





  • 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;
    

Anmelden zum Antworten