23QByteArray byteArrayFromBuffer(
const ComPtr<NativeBuffer> &buffer,
bool isWCharString)
26 qErrnoWarning(
"nullptr passed to byteArrayFromBuffer");
29 ComPtr<Windows::Storage::Streams::IBufferByteAccess> byteAccess;
30 HRESULT hr = buffer.As(&byteAccess);
31 RETURN_IF_FAILED(
"Could not cast buffer",
return QByteArray())
33 hr = byteAccess->Buffer(
reinterpret_cast<byte **>(&data));
34 RETURN_IF_FAILED(
"Could not obtain buffer data",
return QByteArray())
36 hr = buffer->get_Length(&size);
37 RETURN_IF_FAILED(
"Could not obtain buffer size",
return QByteArray())
39 QString valueString = QString::fromUtf16(
reinterpret_cast<
char16_t *>(data)).left(size / 2);
40 return valueString.toUtf8();
42 return QByteArray(data, qint32(size));
52 if (QThread::currentThread() != QCoreApplication::instance()->thread()) {
53 qCWarning(QT_BT_WINDOWS) <<
"Main thread COM init tried from another thread";
57 if (successfulInits.contains(caller)) {
58 qCWarning(QT_BT_WINDOWS) <<
"Multiple COM inits by same object";
62 Q_ASSERT_X(!mainThread || mainThread == QThread::currentThread(),
63 __FUNCTION__,
"QCoreApplication's thread has changed!");
66 if (!SUCCEEDED(CoInitializeEx(NULL, COINIT_APARTMENTTHREADED))) {
67 qCWarning(QT_BT_WINDOWS) <<
"Unexpected COM initialization result";
70 successfulInits.insert(caller);
72 mainThread = QThread::currentThread();
79 if (!successfulInits.contains(caller)) {
80 qCWarning(QT_BT_WINDOWS) <<
"COM uninitialization without initialization";
84 if (QThread::currentThread() != mainThread) {
85 qCWarning(QT_BT_WINDOWS) <<
"Main thread COM uninit tried from another thread";
90 successfulInits.remove(caller);