Ich habe das Web und StackOverflow häufig durchsucht, aber ich kann keine definitive Antwort auf meine folgenden Fragen finden.Portierung plattformübergreifender C++ - Bibliotheken auf Windows Phone 8-Plattform
Kontext:
Ich bin auf der Suche nach Port eine Gruppe von C++ Hilfsbibliotheken für die Verwendung mit dem Windows Phone 8 (WP8) -Plattform. In der Vergangenheit wurden diese Bibliotheken als statische Bibliotheken (anstelle von DLLs) erstellt.
Ich habe erfolgreich den WP8-spezifischen Code geschrieben, so dass die Bibliotheken kompatibel sind und gegen ARM aufbauen, unter Verwendung der für WP8 verfügbaren APIs (unter Verwendung des WP API QuickStart doc als Referenzpunkt). Nur eine der Bibliotheken (z. B. Lib1) benötigt den Verbrauch der WinRT-Erweiterungen (das/ZW-Flag), da die klassischen Win32-Thread-Aufrufe durch den ThreadPool von WinRT ersetzt werden müssen.
Beim Aufbau von Lib1 erhalte ich folgende Warnung: Warnung 1 Warnung LNK4264: Archivierung der Objektdatei mit/ZW in eine statische Bibliothek übersetzt; Beachten Sie, dass beim Erstellen von Windows-Runtime-Typen die Verknüpfung mit einer statischen Bibliothek, die Windows-Laufzeitmetadaten enthält, nicht empfohlen wird.
- für diese Warnung der Suche, fand ich this article, die besagt: „Wenn Sie eine statische Bibliothek verbrauchen, die öffentliche ref Klassen erstellt, die öffentliche Schnittstelle Klassen oder öffentliche Wertklassen, der Linker diese Warnung wirft Sie die ignorieren. Warnung, wenn die statische Bibliothek keine Windows-Runtime-Komponenten erzeugt, die außerhalb der Bibliothek selbst verwendet werden Öffentliche Komponenten in einer statischen Bibliothek werden zur Laufzeit kompiliert, werden jedoch nicht aktiviert Jede Windows-Runtime-Komponente, die von anderen Komponenten oder Apps verwendet werden soll implementiert in einer Dynamic Link Library (DLL). "
In Lib1 enthält ClassA die Funktionen, die WinRT ThreadPool-Aufrufe verwenden. ClassA-Funktionen werden von ClassB aufgerufen, und sie geben einfach reguläre HANDLEs und DWORDs an ClassB zurück.
Code-Beispiel:
// 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 */);
KlasseA Funktionen werden immer nur von ClassB genannt werden, aus Lib1 und ClassB kann dann durch die Anwendung verwendet werden, die Verknüpfung Lib1.
schließlich auf meine Fragen:
Kann die C++ Bibliotheken, die tun nicht WinRT Erweiterungen (/ ZW) verbrauchen, , wenn sie als statische Bibliotheken gebaut, die von Windows Phone 8-Anwendungen verwendet werden, ?
Kann die C++ Bibliothek (Lib1), dass verbraucht WinRT Erweiterungen (/ ZW), wenn sie als eine statische Bibliothek gebaut, die von Windows Phone 8 Anwendungen verwendet werden, trotz der Warnung?
Wenn die Antwort Nein zu jeder Frage ist, werde ich zu WinRT Component Wrapper für alle Klassen in der jeweiligen Bibliothek erstellen, wie this article demonstriert mit dem Mandelbrot-Algorithmus? Oder gibt es noch etwas, das mir fehlt?
Vielen Dank im Voraus für jede Eingabe, die Sie bereitstellen können.