Windows Phone 8 SDK中一個很是有用的特性,就是能夠經過Windows Phone Runtime Component (WinPRT)使用C++代碼來處理運算量大的任務。這樣一來Windows Phone應用的性能會獲得相應的提高,並且增長了代碼的可移植性,有些使用C++寫的類庫也能夠直接調用。WinPRT在內部封裝了原生的C++代碼,只暴露了用於WinRT類型的接口,從而在C#代碼中方便的調用native code。WinPRT是C#代碼到C++代碼的中間層,調用順序是C#->(C++/CX)->C++。C++/CX是C++代碼的擴展(Visual C++ component extensions),使用C++/CX編寫WinPRT來和Visual C#交互。下面就來看看WinPRT的具體使用過程。html
首先添加一個WinPRT項目。windows
添加一個Test類,打開TestComponent.h文件添加以下的代碼。app
#pragma once namespace TestComponent { public ref class Test sealed { public: bool IsTest(); }; }
這裏咱們建立了一個能夠在其餘語言環境下實例化的活躍類,一般被稱爲ref class。一個WinPRT能夠包含多個活躍的公共類,在C#中能夠經過new關鍵字來建立該組件下類的實例。一個活躍類必須被聲明爲public ref class sealed。ref關鍵字告訴編譯器,咱們正在建立一個WinPRT類型的類,sealed關鍵字表明該類是不能夠被繼承的。性能
打開TestComponent.cpp類,添加頭文件中方法的實現。spa
#include "pch.h" #include "TestComponent.h" using namespace TestComponent; bool Test::IsTest() { return true; }
在其餘項目中添加以上WinPRT的引用後就能夠在託管代碼中使用了。code
private void Button_Click(object sender, RoutedEventArgs e) { var test = new TestComponent.Test(); var result = test.IsTest(); // }
上面只給出了一個很是簡單的例子來描述WinPRT的使用過程,在咱們具體的使用過程當中會遇到不少參數類型轉換的問題,即把C#類型的數據轉換成在C++/CX中正確的類型。component
Refernce:htm
Native code for Windows Phone 8blog
Visual C++ Language Reference (C++/CX)繼承
Windows Phone Natives - How to Leverage Native Code on Windows Phone