QString and BSTR



  • hi to everyone
    i have a c# dll that i use it via dumpcpp and active qt
    it works correctly except when i call a function that uses BSTR that dumpcpp converted to QString
    how can i solve this problem?
    how can i convert qString to bstr?



  • something like this ...
    @
    BSTR test = SysAllocString(QString::utf16());
    // to do what you need with "test"
    SysFreeString(test)
    @



  • i want to set a Qstring variable to my Bstr and
    i want to set a Bstr variable to my QString
    can you give me example?



  • [quote author="kitten" date="1316004185"]i want to set a Qstring variable to my Bstr[/quote]
    previous example not work ? ... or some minimal compilable example would be ...
    @
    QString string("whatever string");
    BSTR bstr = SysAllocString(string.utf16());
    // to do what you need with "bstr"
    SysFreeString(bstr);

    @
    [quote author="kitten" date="1316004185"]i want to set a Bstr variable to my QString [/quote]
    QString string = QString::fromUtf16(yourBSTR);



  • thanks alot for your answer
    but i use this code and it get me error
    @ bool qax_result;
    QString st("mil");
    BSTR test = SysAllocString(st.utf16());
    void _a[] = {(void)&qax_result, (void*)&Row, (void*)&Col, (void*)&test};
    qt_metacall(QMetaObject::InvokeMetaMethod, 244, _a);
    SysFreeString(test);
    return qax_result;@
    it is compiled successfully but when i run it, it get me error



  • Hi kitten,

    where do you get which error?
    Did you try to debug it?

    The conversion from QString to BSTR looks generally correct.



  • By the way, do you need a BSTR*?
    in the parameters, you write:

    @
    (void*)&test...
    @

    a BSTR is already a pointer....



  • i use this but it get me error again
    @void _a[] = {(void)&qax_result, (void*)&Row, (void*)&Col, (void*)test};@
    it get me error on this file
    qatomic_windows.h
    on function
    @inline bool QBasicAtomicInt::ref()@



  • I did a little test, and it works perfectly:
    @
    QString string("test");
    BSTR bstr = SysAllocString(reinterpret_cast<const OLECHAR*>(string.utf16()));
    char testing[] = {bstr[0], bstr[1], bstr[2], bstr[3], '\0'};
    qDebug(testing);
    SysFreeString(bstr);
    @

    debug window show "test"



  • Just out of curiosity, if you delete last parameter(test) from _a array, the problem still exists ?



  • [quote author="kitten" date="1316007780"]i use this but it get me error again
    @void _a[] = {(void)&qax_result, (void*)&Row, (void*)&Col, (void*)test};@
    it get me error on this file
    qatomic_windows.h
    on function

    @
    inline bool QBasicAtomicInt::ref()
    @
    [/quote]

    Which error message do you get???

    this is just a parameter assignement, nothing else



  • it work correctly
    do you what i want to do?
    i have a .net dll now i want to write a program for it
    i use dumpcpp to use it , it works correctly and this functions work correctly too
    but when i send a text of other languages like persian to this dll it show me ???? in replace of my text



  • !http://www.pic.iran-forum.ir/images/81rzhse7v2t3wujmtb1.jpg(error)!
    [quote author="Gerolf" date="1316008510"][quote author="kitten" date="1316007780"]i use this but it get me error again
    @void _a[] = {(void)&qax_result, (void*)&Row, (void*)&Col, (void*)test};@
    it get me error on this file
    qatomic_windows.h
    on function
    @inline bool QBasicAtomicInt::ref()@[/quote]

    Which error message do you get???

    this is just a parameter assignement, nothing else[/quote]



  • which is the call stack?



  • what do you mean by call stack?



  • In Visual Studio is: Debug -> Windows -> Call Stack



  • this is my call stack when i got error
    !http://www.pic.iran-forum.ir/images/vpo7zgu8y0gdpbw6id4l.jpg(call stack)!



  • [quote author="kitten" date="1316008652"]it work correctly
    i use dumpcpp to use it , it works correctly and this functions work correctly too
    but when i send a text of other languages like persian to this dll it show me ???? in replace of my text
    [/quote]

    What work correctly ? When your program crashes ?
    Also for persian and arabic conversion, maybe "PAText wiki":http://developer.qt.nokia.com/wiki/QPlugs_PAText_Add_Persian_and_Arabic_support_to_WindowsCE_Mobile_applications will help you



  • it is generated with dumpcpp
    if i use the default it work corrctly on english language
    but in persian language it doesn't work correctly



  • How do you enter persian text?
    The shown call stack is too short, please copy it out of the call stack window and post it as text.



  • @> QtCored4.dll!QBasicAtomicInt::ref() Line 319 + 0x8 bytes C++
    QtCored4.dll!QString::QString(const QString & other={...}) Line 729 + 0x51 bytes C++
    QtCored4.dll!v_construct<QString>(QVariant::Private * x=0x0030f4b0, const void * copy=0x0070c05c, QString * formal=0x00000000) Line 117 + 0x2a bytes C++
    QtCored4.dll!construct(QVariant::Private * x=0x0030f4b0, const void * copy=0x0070c05c) Line 81 + 0xf bytes C++
    QtGuid4.dll!construct(QVariant::Private * x=0x0030f4b0, const void * copy=0x0070c05c) Line 182 + 0x12 bytes C++
    QtCored4.dll!QVariant::create(int type=10, const void * copy=0x0070c05c) Line 1391 + 0x11 bytes C++
    QtCored4.dll!QVariant::QVariant(int typeOrUserType=10, const void * copy=0x0070c05c) Line 1670 + 0x1f bytes C++
    new qt finger.exe!QAxBase::internalInvoke() + 0x43c bytes
    new qt finger.exe!QAxBase::qt_metacall() + 0x19f bytes
    new qt finger.exe!QAxWidget::qt_metacall() + 0x41 bytes
    new qt finger.exe!zkemkeeper::CZKEM::WriteLCD(int Row=5, int Col=5, const QString & Text={...}) Line 4828 C++
    new qt finger.exe!newqtfinger::newqtfinger(QWidget * parent=0x00000000, QFlags<enum Qt::WindowType> flags={...}) Line 13 + 0x31 bytes C++
    new qt finger.exe!main(int argc=1, char * * argv=0x022164a8) Line 6 + 0x17 bytes C++
    new qt finger.exe!WinMain(HINSTANCE
    * instance=0x00890000, HINSTANCE__ * prevInstance=0x00000000, char * __formal=0x006f5eae, int cmdShow=1) Line 131 + 0x12 bytes C++
    new qt finger.exe!__tmainCRTStartup() Line 574 + 0x35 bytes C
    new qt finger.exe!WinMainCRTStartup() Line 399 C
    kernel32.dll!76e733ca()
    [Frames below may be incorrect and/or missing, no symbols loaded for kernel32.dll]
    ntdll.dll!778f9ed2()
    ntdll.dll!778f9ea5()
    @



  • i think it isn't about persian
    because when i use this conversion english does'nt work too



  • How is the persian text entered?
    how does zkemkeeper::CZKEM::WriteLCD(...) look like?



  • this is my function i want to use it
    @
    inline bool CZKEM::WriteLCD(int Row, int Col, const QString& Text){
    bool qax_result;
    QString st("mil");
    BSTR test = SysAllocString(st.utf16());
    _bstr_t te(test);
    void _a[] = {(void)&qax_result, (void*)&Row, (void*)&Col, (void*)test};
    qt_metacall(QMetaObject::InvokeMetaMethod, 244, _a);
    SysFreeString(test);
    return qax_result;
    }
    @

    and this is a function generated with dumpcpp
    @inline bool CZKEM::WriteLCD(int Row, int Col, const QString& Text)
    {
    bool qax_result;
    void _a[] = {(void)&qax_result, (void*)&Row, (void*)&Col, (void*)&Text};
    qt_metacall(QMetaObject::InvokeMetaMethod, 244, _a);
    return qax_result;
    }@

    i am changing the function



  • Looks like the function needs a QString, why do you manually change the QString to BSTR? QAxXXX uses Qt datatypes.



  • because when i send a persian text it doesn't show it correctly on the lcd
    or when i want to get information from it via this dll it does'nt show me anything
    i think qStrong can't work well here
    i don't know why


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.