25QByteArray byteArrayFromBuffer(
const ComPtr<NativeBuffer> &buffer,
bool isWCharString)
28 qErrnoWarning(
"nullptr passed to byteArrayFromBuffer");
31 ComPtr<Windows::Storage::Streams::IBufferByteAccess> byteAccess;
32 HRESULT hr = buffer.As(&byteAccess);
33 RETURN_IF_FAILED(
"Could not cast buffer",
return QByteArray())
35 hr = byteAccess->Buffer(
reinterpret_cast<byte **>(&data));
36 RETURN_IF_FAILED(
"Could not obtain buffer data",
return QByteArray())
38 hr = buffer->get_Length(&size);
39 RETURN_IF_FAILED(
"Could not obtain buffer size",
return QByteArray())
41 QString valueString = QString::fromUtf16(
reinterpret_cast<
char16_t *>(data)).left(size / 2);
42 return valueString.toUtf8();
44 return QByteArray(data, qint32(size));
54 if (QMutexLocker locker(&initsMutex); successfulInits.contains(caller)) {
55 qCWarning(QT_BT_WINDOWS) <<
"Multiple COM inits by the same object";
63 HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
67 if (hr != RPC_E_CHANGED_MODE)
68 qCWarning(QT_BT_WINDOWS) <<
"Unexpected COM initialization result";
72 QMutexLocker locker(&initsMutex);
73 successfulInits.insert(caller, QThread::currentThread());
80 QThread *thread =
nullptr;
82 QMutexLocker locker(&initsMutex);
83 thread = successfulInits.value(caller,
nullptr);
89 if (QThread::currentThread() != thread) {
90 qCWarning(QT_BT_WINDOWS) <<
"COM uninit tried from another thread";
96 QMutexLocker locker(&initsMutex);
97 successfulInits.remove(caller);