windows: Make sure everything is properly CoInitialized on desktop use

Task-number: QTBUG-61566
Change-Id: I5f8ff2c3e8a841ab8c5a3fb465d0be4b003d7a2b
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
This commit is contained in:
Oliver Wolff 2017-08-07 13:25:45 +02:00
parent dbd70341ea
commit 8f1bd6c6c0
2 changed files with 15 additions and 0 deletions

View File

@ -133,6 +133,9 @@ QWinRTBluetoothDeviceDiscoveryWorker::QWinRTBluetoothDeviceDiscoveryWorker(QBlue
{
qRegisterMetaType<QBluetoothDeviceInfo>();
#ifdef CLASSIC_APP_BUILD
CoInitialize(NULL);
#endif
HRESULT hr = GetActivationFactory(HString::MakeReference(RuntimeClass_Windows_Devices_Bluetooth_BluetoothDevice).Get(), &m_deviceStatics);
Q_ASSERT_SUCCEEDED(hr);
hr = GetActivationFactory(HString::MakeReference(RuntimeClass_Windows_Devices_Bluetooth_BluetoothLEDevice).Get(), &m_leDeviceStatics);
@ -142,6 +145,9 @@ QWinRTBluetoothDeviceDiscoveryWorker::QWinRTBluetoothDeviceDiscoveryWorker(QBlue
QWinRTBluetoothDeviceDiscoveryWorker::~QWinRTBluetoothDeviceDiscoveryWorker()
{
stop();
#ifdef CLASSIC_APP_BUILD
CoUninitialize();
#endif
}
void QWinRTBluetoothDeviceDiscoveryWorker::start()

View File

@ -73,6 +73,9 @@ QHash<QBluetoothServerPrivate *, int> __fakeServerPorts;
QBluetoothServerPrivate::QBluetoothServerPrivate(QBluetoothServiceInfo::Protocol sType)
: maxPendingConnections(1), serverType(sType), m_lastError(QBluetoothServer::NoError), socket(0)
{
#ifdef CLASSIC_APP_BUILD
CoInitialize(NULL);
#endif
socket = new QBluetoothSocket(QBluetoothServiceInfo::RfcommProtocol);
}
@ -82,6 +85,12 @@ QBluetoothServerPrivate::~QBluetoothServerPrivate()
__fakeServerPorts.remove(this);
if (socket)
delete socket;
#ifdef CLASSIC_APP_BUILD
// If we do not reset that pointer, socketListener will go out of scope after CoUninitialize was
// called, which will lead to a crash.
socketListener = nullptr;
CoUninitialize();
#endif
}
bool QBluetoothServerPrivate::isListening() const