Presentation is loading. Please wait.

Presentation is loading. Please wait.

帰ってきた C++ CommunityOpenDay2013 2013/5/11 Sat Room metro 大阪 遥佐保.

Similar presentations


Presentation on theme: "帰ってきた C++ CommunityOpenDay2013 2013/5/11 Sat Room metro 大阪 遥佐保."— Presentation transcript:

1 帰ってきた C++ CommunityOpenDay2013 2013/5/11 Sat Room metro 大阪 遥佐保

2 はじめに

3 @hr_sao 名前と経歴を言う 出没コミュニティ Room metro (大阪) ExceptionalC++ 読書会(大阪) SQLWorld (大阪) 自己紹介

4 VisualStudio2012 の C++ 関連の 理解度を深める 本日の目的

5 0. C++ とその周りの歴史 1. C++ separate programing categories 2. Windows application – UI 3. How can you use Visual Studio 2012? 4. Windows store apps – C++/CX 5. How to learn C++/CX -. Welcome back to Windows Phone Topics

6 0. C++ とその周りの歴史

7 ‘00 ~ ‘90 ~ ‘80 ~ ‘70 ~ ‘60 ~ C/C++ の歴史

8 より上位の高級言語を目指した Java と C# Web 系言語の登場 …> どうみても押され気味 ? 90 年代以降をよく見て見る ‘00 ~ ‘90 ~

9 ‘00 ~ iOS と Android が登場 ナローバンドでの利用前提 Web 画面遷移の操作感の限界 クライアント側に情報を! 2000 年後半にスマートフォンの登場

10 http://isocpp.org/std/status Recently Published: C++11 (2011)

11 いったん Web に走ったみんなの気持ちが クライアントサイド ( ネイティブ ) に戻ってきた … ! C++11 規格をひっさげて VisualStudio2012 が 通りますよっ Welcome back to C++

12 1. Portability Linux と Windows で同じコードを動かす 2. Reusability 既存ライブラリ使いたい 3. Performance.NET がリッチすぎる Now… use cases for C++

13 1. C++ separate programing categories

14 プログラミングのカテゴリが 3 つある C 言語を使う Class を使う Template を使う C++ Primer Plus (6th Edition) http://www.amazon.com/Primer-Plus-6th-Developers-Library/dp/0321776402http://www.amazon.com/Primer-Plus-6th-Developers-Library/dp/0321776402 Day 1 Keynote - Bjarne Stroustrup: C++11 Style http://channel9.msdn.com/Events/GoingNative/GoingNative- 2012/Keynote-Bjarne-Stroustrup-Cpp11-Stylehttp://channel9.msdn.com/Events/GoingNative/GoingNative- 2012/Keynote-Bjarne-Stroustrup-Cpp11-Style C++ の世界

15 手続き型言語 開発効率が高いとは言えないがシンプル 実行速度が速く、サイズも小さい ↑↑↑ もちろん作り方に依存するが、普通はそうなる function と struct の世界 macros / void* / casts の多用スキルが身についてしまう C 言語の世界

16 C 言語にプラスされたオブジェクト指向言語 struct にもっと機能を入れたなどなど private / operator overload / inheritance / interface / exception / virtual functions … C 言語よりは開発効率は上がる ↑↑↑ もちろん作り方に依存するが、普通はそうなる C++85 style ( C with Classes) class の世界

17 ジェネリック / メタプログラミングが可能 データの型には依存せず 任意 Object を格納できるコンテナ クラス・関数テンプレート / 特殊化 / テンプレートパラメータ … 型・数値の差し替え、型推論でコーディング量 の減少が可能に その他応用例も多数 template の世界 いつでもどこでも Template(^^)

18 sample: C style and C++11 // for-loop sum = 0; for( vector size_type i = 0; i < v.size(); i ++ ){ sum += v [ i ]; } // for_each + lambda sum = 0; for_each( v.begin(), v.end(), [&sum]( int x ) { sum += x; });

19 例えば、 C 言語を使う人の本音は マクロだけで頑張るのはホントは辛い ポインタを安全に使いたい、頑張ってるけどさ エラー処理を確実にしたい、頑張ってるけどさ もっと便利な機能を使いたい! そこでCの拡張です! Why Language Extensions?

20 例えば、 Windows で C++ を使う人の本音は ファイルの操作、もっと楽に出来ないのかなぁ 表示といえば、 MFC/DirectX/GDI… なんでこんなにコーディ ング量多いの …(  ̄ д  ̄ ) エー いつも「それ C# がよしなにやってくれるよ」と言われる Java/C# 使いたくない!! そこでC++の拡張です! Why Language Extensions? part2

21 C++ 言語の拡張 Visual C++ コンポーネント拡張のことを指す Windows ストアアプリの作成用 ※ストアアプリ以外でも利用可能 C++/CX

22 2. Windows application - UI

23 Programing model Desktop apps C C++ Win32 C# VB.NET SL HTML JavaScript Internet Explorer Windows store apps Windows Kernel Services Communication & Data Devices & Printing WinRT APIs Graphics & Media Application Model XAML JavaScript HTML / CSS C C++ C# VB DirectX

24 C#/VB.NET での UI の表現 Windows apps - C#/VB.NET XAML C#/VB.NET -.netframework XNA WinForm

25 JavaScript UI Windows apps - JavaScript JavaScript HTML JSIL Enchant Moon PhoneGap

26 C++ から見ると簡単に表現する方法が増えた! Windows apps - C++ XAML C/C++ DirectX GDI MFC WTL OpenGL

27 3. How can you use Visual Studio 2012?

28 Store appsDesktop Visual Studio 2012 の C++ の世界 Windows8 DirectX Windows Phone8 DirectX apps for phone XAML for C++ WRLWTL MFC

29 Windows ストアアプリで COM コンポーネントなど ローレベルアクセスを行う Template Library → WindowsRuntime は使わず ATL で記述された COM コンポーネントを簡単に移 植、操作可能 WTL:Windows Template Library – ATL:Active Template Library という COM プログラミングを簡単にする ためのテンプレートベースのライブラリ、ダイアログ、フレーム、 GDI などなど,MFC より軽い Windows Runtime C++ Template Library (WRL)

30 DirectX 機能レベル ShaderModel D3D_FEATURE_LEVEL_9_12.0 D3D_FEATURE_LEVEL_9_22.0 D3D_FEATURE_LEVEL_9_32.0 D3D_FEATURE_LEVEL_10_04.0 D3D_FEATURE_LEVEL_10_14.1 D3D_FEATURE_LEVEL_11_05.0 D3D_FEATURE_LEVEL_11_15.0 RT なら Feature Level は 「 D3D_FEATURE_LEVE L_9_1 」ベース Windows 環境にビデオやサウンドなどのマルチメ ディア機能を提供するための API Windows ストアアプリは、 DirectX11.1 の書き方のみ

31 C++/CX C#/VB.NET と同様の UI 表現 -XAML が利用可能 XML ベースで UI を表現する XAML for C++

32 4. Windows store apps – C++/CX

33 Build の流れ – C++ 編 WinRT : Windows ストア Apps の プロジェクトファイル なんとなく触れそうなファイルは3つ MainPage.xaml MainPage.cpp MainPage.h

34 Windows store apps – C++ build Auto Generated 見慣れないソースコードが しれっと自動生成されます

35 XAML Obj を利用可能な pointer に void ::StoreApp1::MainPage::InitializeComponent() { … btn00 = safe_cast (static_cast (this)->FindName(L"btn00")); … }

36 WinRT C++ Build process

37 .winmd ファイルのおかげ WinRT のクラス名やメソッド名などの メタデータが入っているファイル.NET, C++, javaScript が共通で理解できる → *.lib ファイルに似てます! →.NET アセンブリと同じ (binary format) *.winmd ファイルが VisualStudio でコンパイルする時に WinRT の DLL の場所を教えてくれる

38 Windows meta data.winmd ファイル C:\Windows\System32\WinMetadata フォルダ

39 C:\Windows\System32 の下にあるよ Windows. ○○○.dll WinRT の実体 実体は DLL だったんですね!!

40 良い感じにマップしてくれる例 Windows::Foundation の HSTRING ハンドルは … C++/CX が Windows メタデータ (.winmd) ファイルを読み取ると … 言語 HSTRING のマップ C++/CXPlatform::String class JavaScriptString object C#/VB.NETSystem.String class

41 WinRT は API 単なるインタフェース 実体は DLL Desktop apps C C++ Win32 C# VB.NET SL HTML JavaScript Internet Explorer Windows store apps Windows Kernel Services Communication & Data Devices & Printing WinRT APIs Graphics & Media Application Model XAML JavaScript HTML / CSS C C++ C# VB DirectX デスクトップ C++ からも呼べるよ ※ XAML/HTML 系以外

42 Windows Runtime C#, VB, C++ に提供されている API UI 関係は Windows.UI.Xaml (★) Windows Library for JavaScript JavaScript API ( 各種コントロール、 CSS ) (★)に相当するのは WinJS 名前空間 Windows ストアアプリの WindowsAPI

43 デスクトップアプリからも WindowsRuntime 利用可能 Win32 コンソールアプリケーション作成 int main( Platform::Array ^ argv ) コンパイルオプション /ZW つける、 /Gm- を外す.winmd ファイルを 2 つ参照追加 Windows.winmd - C:\Program Files (x86)\Windows Kits\8.0\References\CommonConfiguration\Natural Platform.winmd - C:\Program Files (x86)\Microsoft SDKs\Windows\8.0\ExtensionsSDKs\Microsoft.VCLibs\11.0\References\CommonConfiguration\natural

44 5. How to learn C++/CX

45 C++/CX を学習する WinRT API が利用可能 → ネイティブライブラリ、 XAML が利用可能 DirectX の利用可能 純粋にネイティブアプリ – WRL 利用可能 XAML からの DirectX 利用可能 → 最初はいいと思ったけど後で良いかも XAML オブジェクトの 中が DirectX の世界

46 今、 C#/VB.net で作っている人 そのまま、 C# で書けばいいよ! C++ や DLL を呼び出す部分は完備されてます l Why do we use C++? でも、勘違いしないで!!

47 今までは C#/VB.NET でしかできなかった (仕方ない) XAML 系での最終表現の形態がそれしかなかった Why do we use C++? でも、今は違います!!

48 WinRT における C++ の土俵 C# が出来ることと全く同じことが可能 C# で出来るから C# を利用する時代ではない Why do we use C++? 表現出来る土表は全て整っている

49 C++ プログラマに C++/CX つまり Windows ストアアプリを 作るための情報が必要に行きわたっていないこと 正しい C++ での Windows ストアアプリの使い方を 伝えていないことにある (だって XAML 系の使い方に慣れてるのは C#/VB.NET 系 ユーザなんだから、仕方ないでしょ) 問題は …

50 MSDN : C++ を使った Windows ストア アプリの ためのロードマップ http://msdn.microsoft.com/ja-jp/library/windows/apps/xaml/hh700360.aspx Windows ストアアプリのための C++ 情報まとめ concurrency::create_async … task – then(), when_all() … casablanca – C++ REST SDK bindings to HTTP, JSON, and URIs ストアアプリで C++ を選択したら …

51 http://hilo.codeplex.com/ C++ と XAML を利用するための実践的サンプル Hilo Windows7 の時は DirectX でした 今は C++/XAML 版と、 JavaScript 版があるよ

52 Windows 8 Microsoft Visual Studio 2012 C++ と XAML のプログラミングに対する関心 → C++ と異なり、 XAML は UI を宣言型で書ける Hilo 利用の前提条件

53 UX の設計 非同期プログラミング パターンとヒント タイルとスプラッシュ画面の操作 Model-View-ViewModel (MVVM) パターン使用 リポジトリ パターンの使用 ページの作成とページ間の移動 コントロールの使用 タッチの使用 Hilo で学べること 中断、再開、アクティブ化の処理 パフォーマンスの向上 Windows ストア アプリのテストと展開

54 初心者向け表記 巨大なリンク集&プログラム解説 http://msdn.microsoft.com/ja-jp/library/windows/apps/jj160316.aspx http://msdn.microsoft.com/ja-jp/library/windows/apps/jj160316.aspx

55 C++/CX プログラミングノウハウ Hilo

56 task チェーン – 処理流れ、チェーンの取り消し Hilo

57

58 Hilo で Windows ストアアプリの作り方を覚えたら、 次は通信がしたくなる http://casablanca.codeplex.com/ http://casablanca.codeplex.com/ Casablanca – C++ REST SDK

59 REST サービス (Windows Vista/7/8, Linux) VS2010/2012, クラウドベースの通信サポート 非同期処理、ストリームバッファ HTTP Client C++11 base Apache オープンソース Casablanca とは Azure など

60 -. Welcome back to Windows Phone

61 Windows Phone8 の C++ サポート VC++ 2012 Windows8 と同じコードで OK C++11 ベース DirectX ( XAML は利用できない ) Using C++ in your Windows Phoen Apps

62 summary

63 クライアントサイドアプリケーション復権 C++ ネイティブコード C++11 規格 拡張 C++/CX XAML での表現力 Windows Runtime は API XAML × C++ の学習 Hilo / Casablanca まとめ

64 これからも C++ でアプリケーションを作りましょう そのための道は マイクロソフトが全て用意してくれています


Download ppt "帰ってきた C++ CommunityOpenDay2013 2013/5/11 Sat Room metro 大阪 遥佐保."

Similar presentations


Ads by Google