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