私はWebとStackOverflowを多く検索しましたが、私の次の質問には明確な答えが見つからないようです。クロスプラットフォームのC++ライブラリをWindows Phone 8プラットフォームに移植する
コンテキスト:
私はポートにのWindows Phone 8(WP8)プラットフォームで使用するためのC++ヘルパーライブラリのグループを探しています。歴史的に、これらのライブラリは静的ライブラリ(DLLではなく)としてビルドされています。
私はWP8固有のコードを書いているので、ライブラリはWP8(WP API QuickStartドキュメントを参照ポイントとして使用)で使用可能なAPIを使用してARMと互換性がありビルドすることができます。従来のWin32スレッド呼び出しをWinRTのThreadPoolに置き換える必要があるため、ライブラリの1つ(たとえばLib1)のみがWinRT拡張機能(/ ZWフラグ)の消費を必要とします。
Lib1を構築すると、次の警告が表示されます。 警告1警告LNK4264:/ ZWでコンパイルされたオブジェクトファイルを静的ライブラリにアーカイブします。 Windowsランタイムタイプをオーサリングするときは、Windowsランタイムメタデータを含む静的ライブラリにリンクすることはお勧めしません。
- この警告を探して、私は述べ、this articleが見つかりました: 「あなたは公共のREFクラス、パブリックインターフェイスクラス、または公共の値クラスを作成し、静的ライブラリを消費した場合、リンカはこの警告を発生させますあなたが安全に無視することができます。静的ライブラリがライブラリ自体の外部で消費されるWindowsランタイムコンポーネントを生成していないかどうかを警告する静的ライブラリのパブリックコンポーネントはコンパイルされますが、実行時にはアクティブ化されません。ダイナミックリンクライブラリ(DLL)で実装されています。
Lib1では、ClassAにWinRT ThreadPool呼び出しを使用する関数が含まれています。 ClassA関数は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の機能は今までLIB1の中から、ClassBので呼び出され、ClassBのは、LIB1をリンクするアプリケーションで使用することができます。
最後に、私の質問へ:
できる静的LIBSとして建てられたときに、 、Windowsの携帯電話で使用されるC++ ないは、WinRTの拡張(/ ZW)を消費行うライブラリ8つのアプリケーション?静的libのように構築するとき
はがは、WinRTの拡張 (/ ZW)を消費しないことをC++ライブラリ(LIB1)は、警告にもかかわらず、Windowsの携帯電話8 アプリケーションで使用することはできますか?答えはどちらかの質問にはNOである場合
、私はそれぞれのライブラリ内のクラスのすべてのためにWinRTの コンポーネントのラッパーを作成する必要があります、this articleよう はマンデルブロアルゴリズムを示していませんか?それとも、私は行方不明ですか?
ご提供いただける入力がありましたら、事前にお知らせください。