2016-05-03 80 views
0

我已經在QtCreator和Visual Studio 2015中試過了。我玩過不同的配置,並且據我所知我的環境設置正確。然而,每當我進行API調用(到目前爲止,我只嘗試WiFi直接調用),並建立在釋放模式,我得到這個錯誤。Qt 5.6桌面應用程序(msvc 2015)可以使用WinRT庫(C++/CX)嗎?

C2664 'long __winRT::__getActivationFactoryByPCWSTR(void *,Platform::Guid &,void **)': cannot convert argument 1 from 'const wchar_t [60]' to 'void *' 

在調試我在Visual Studio中得到這些錯誤2015年

Error LNK2038 mismatch detected for '_MSC_VER': value '1800' doesn't match value '1900' in main.obj qtmaind.lib(qtmain_win.obj) 

Error LNK2001 unresolved external symbol "public: virtual struct QMetaObject const * __thiscall MainWindow::metaObject(void)const " ([email protected]@@[email protected]@XZ) PROJECT  mainwindow.obj 

Error LNK2001 unresolved external symbol "public: virtual void * __thiscall MainWindow::qt_metacast(char const *)" ([email protected]@@[email protected]) SSLocalServer mainwindow.obj 

Error LNK2001 unresolved external symbol "public: virtual int __thiscall MainWindow::qt_metacall(enum QMetaObject::Call,int,void * *)" ([email protected]@@[email protected]@@[email protected]) mainwindow.obj 

Error LNK2019 unresolved external symbol "__declspec(dllimport) char const * __cdecl std::_Winerror_map(int)" ([email protected]@@[email protected]) referenced in function "public: virtual class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall std::_System_error_category::message(int)const " ([email protected][email protected]@@[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@Z) qtmaind.lib(qtmain_win.obj) 

簡單的問題第一。使用當前版本的Qt 5.6甚至有可能在桌面應用程序中使用WinRT API(特別是WiFi Direct)?

如果是,我錯過了什麼?編輯 - My test project. Qt目錄可能需要更改。

+0

你確定你使用的Qt的拷貝是用你用來編譯你的應用程序的相同編譯器編譯的嗎? [這個問題](http://stackoverflow.com/q/19575747/1329652)是關於這個問題。 –

+0

請添加一個重現問題的最小示例。確保包含完整的'.pro'文件,完整的'main.cpp'(它應該是唯一的其他源文件),以及指向您的Qt二進制文件或您使用的'configure'行的鏈接編譯你的Qt副本。 –

+0

@KubaOber測試項目添加。我沒有編譯我自己的Qt版本。這是5.6版的社區版本,它似乎是使用不同版本的msvc編譯的debug msvc 2015調試庫。 – Simurr

回答

0

MS報頭中的某些宏擴展錯誤,並嘗試將錯誤的事情傳遞給__getActivationFactoryByPCWSTR。你需要弄清楚它爲什麼會發生。 Qt桌面應用程序並不特別,它們就像任何其他桌面應用程序一樣:如果任何桌面應用程序都可以使用這些API,那麼Qt桌面應用程序也可以。

唉,桌面應用程序只能使用Windows Runtime API的subset。 Wifi Direct不在此處列出。也許你應該使用桌面WiFi直接API,它們更便攜。

+0

謝謝您的回答,但這有幫助嗎?如果任何桌面應用程序都可以使用這些API,爲什麼Qt會失敗?有什麼不同嗎?這確實給了我一個想法,通過例子來看看項目中是否存在缺失的項目。 – Simurr

+0

@Simurr Qt在這方面不是問題。 Qt對你的代碼的唯一影響是通過項目配置(你的.pro或cmake文件)和用於構建Qt的mkspecs。到目前爲止,我沒有看到這個問題。 –

+0

[Windows.Devices.WiFiDirect](https://msdn.microsoft.com/library/windows/apps/windows.devices.wifidirect.aspx)命名空間可用於桌面應用程序(它只是將本機[Wi-Fi直接函數](https://msdn.microsoft.com/en-us/library/windows/desktop/dn457945.aspx))。要驗證這一點,您可以選擇任何類並檢查[DualApiPartition]屬性(https://msdn.microsoft.com/en-us/library/windows/apps/windows.foundation.metadata.dualapipartitionattribute.aspx)。 – IInspectable

相關問題