小编WP8*_*ner的帖子

将跨平台C++库移植到Windows Phone 8平台

我搜索过网络和StackOverflow很多,但似乎无法找到我以下问题的明确答案.

语境:

我希望移植一组C++帮助程序库,以便与Windows Phone 8(WP8)平台一起使用.从历史上看,这些库是作为静态库(而不是DLL)构建的.

我已成功编写了特定于WP8的代码,因此使用WP8可用的API(使用WP API QuickStart doc作为参考点),库与ARM兼容并构建.由于必须用WinRT的ThreadPool替换经典的Win32 Thread调用,因此只有一个库(例如Lib1)需要使用WinRT扩展(/ ZW标志).

构建Lib1时,我收到以下警告:警告1警告LNK4264:将使用/ ZW编译的目标文件归档到静态库中; 请注意,在创作Windows运行时类型时,建议不要使用包含Windows运行时元数据的静态库进行链接.

- 搜索此警告,我发现这篇文章,指出:"如果您使用创建公共引用类,公共接口类或公共值类的静态库,链接器会引发此警告.如果静态,您可以安全地忽略警告库不会生成在库本身之外使用的Windows运行时组件.静态库中的公共组件将编译但不会在运行时激活.任何打算供其他组件或应用程序使用的Windows运行时组件必须在动态中实现-link library(DLL)."

在Lib1中,ClassA包含使用WinRT ThreadPool调用的函数.ClassA调用ClassA函数,它们只是将常规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 */);
Run Code Online (Sandbox Code Playgroud)

ClassA的函数只能由ClassB从Lib1中调用,然后ClassB可以被链接Lib1的应用程序使用.

最后,对我的问题: …

c++ cross-platform static-libraries windows-runtime windows-phone-8

15
推荐指数
1
解决办法
2903
查看次数