Zakładając, że jestem na Windows 8+ i mam aplikację Win32/C. Czy moja aplikacja Win32 może wywoływać interfejs API WinRT?Możliwe dla aplikacji Win32 wywoływanie interfejsu API WinRT?
Odpowiedz
Krótka odpowiedź - tak: How to: Activate and Use a Windows Runtime Component Using WRL
Długa odpowiedź: systemu Windows Runtime jest w dużym stopniu oparta na technologii COM. Składniki środowiska wykonawczego Windows są w rzeczywistości obiektami COM. Tak więc wspólne reguły do tworzenia instancji i korzystania z obiektów COM mają zastosowanie do składników środowiska wykonawczego Windows.
Najpierw należy zainicjować środowisko wykonawcze systemu Windows. Istnieje przydatna klasa o nazwie RoInitializeWrapper
, której możesz użyć, aby to zrobić. Następnie należy użyć fabryki aktywacji, aby uzyskać wskaźnik do interfejsu komponentu środowiska wykonawczego systemu Windows. Pracujesz z interfejsem, a kiedy skończysz, musisz zrezygnować z inicjowania środowiska wykonawczego Windows, niszcząc swój RoInitializeWrapper
.
Ten artykuł zawiera wiele przykładów - https://msdn.microsoft.com/en-us/library/windows/desktop/mt759320(v=vs.85).aspx(d=robot) - Głównym tematem artykułu jest w systemie Windows Information Protection, ale pokazuje zarówno przykłady aktywacji C++/CX, jak i COM z prostą jane C++. –
@JonathanPotter: wprowadzenie [this] (http://blogs.msdn.com/b/cdndevs/archive/2013/10/02/using-windows-8-winrt-apis-in-net-desktop-applications .aspx) i [this] (http://www.codeproject.com/Articles/12673/Calling-Managed-NET-C-COM-Objects-from-Unmanaged-C) razem sugerują, że powinno być możliwe. Czy jest jakiś haczyk, którego nie widzę? –
@HarryJohnston: Interesujący link. Być może jest to możliwe w pewien ograniczony sposób. Powinieneś zrobić to odpowiedź. –
Które API chcesz połączyć? –