我已經搜索了很多Web和StackOverflow,但是似乎無法爲我的下列問題找到明確的答案。將跨平臺C++庫移植到Windows Phone 8平臺
語境:
我期待端口一組C++助手庫來使用了Windows Phone 8(WP8)平臺使用。從歷史上看,這些庫是作爲靜態庫(而不是DLL)構建的。
我已經成功編寫了WP8特定的代碼,以便使用WP8提供的API(使用WP API QuickStart doc作爲參考點),可以兼容和構建針對ARM的庫。由於必須用WinRT的ThreadPool替換經典的Win32線程調用,因此只有一個庫(例如Lib1)需要使用WinRT擴展(/ ZW標誌)。
構建Lib1時,出現以下警告: 警告1警告LNK4264:將用/ ZW編譯的目標文件歸檔到靜態庫中;請注意,在創作Windows運行時類型時,不建議使用包含Windows運行時元數據的靜態庫進行鏈接。
- 尋找這個警告,我發現this article,他說: 「如果你消耗,創造公開裁判班,公共接口類,或公共價值類的靜態庫,鏈接器提出了這樣的警告可以放心地忽略了。警告如果靜態庫不生成在庫本身之外使用的Windows運行時組件,靜態庫中的公共組件將在編譯時運行,但不會在運行時激活任何用於其他組件或應用程序的Windows運行時組件必須在動態鏈接庫(DLL)中實現。「
在Lib1中,ClassA包含使用WinRT ThreadPool調用的函數。 ClassB函數由ClassB調用,它們只是將常規的HANDLE和DWORD返回給ClassB。
代碼示例:
// ClassA.cpp
HANDLE WINAPI ClassA::CreateThread(/* Params that are usually passed to Win32 CreateThread */)
{
// Do WinRTThreadPool stuff to create WorkItem
auto workItem = ref new Windows::System::Threading::WorkItemHandler([=](Windows::Foundation::IAsyncAction^)
// More code that eventually results in a Win32 Handle
return handle;
}
// ClassB.cpp
Handle handle = ClassA::CreateThread(/* Params that are usually passed to Win32 CreateThread */);
ClassA的職能將只被稱爲ClassB的,從內部LIB1,和ClassB然後可以通過鏈接LIB1應用程序使用。
最後,我的問題:
能否C++是做不消耗WinRT的擴展(/ ZW)庫, 當靜態庫構建,通過的Windows Phone使用8個應用程序?
能的C++庫(LIB1)是不消耗的WinRT擴展 (/ ZW),當作爲靜態庫構建,可通過的Windows Phone 8個 應用,儘管使用的警告?
如果答案是否定的,以任何一個問題,我將在各自的圖書館創建的所有類的WinRT的 組件封裝, 像this article演示與曼德爾布羅算法?還是有什麼我失蹤?
在此先感謝您提供的任何輸入內容。