Presentation is loading. Please wait.

Presentation is loading. Please wait.

C++/CLI カクテル・レシピ episthmh (゚Д゚)ウマー Microsoft MVP, Visual C++

Similar presentations


Presentation on theme: "C++/CLI カクテル・レシピ episthmh (゚Д゚)ウマー Microsoft MVP, Visual C++"— Presentation transcript:

1 C++/CLI カクテル・レシピ episthmh (゚Д゚)ウマー Microsoft MVP, Visual C++

2 Visual Basic / C# にはマネできんこと
C++/CLI ってば… Cであり C++であり .NETである Visual Basic / C# にはマネできんこと やってやろうぜぃ!

3 (1.1) Native を Managed の中に混ぜるには
class Native { … }; ref class Managed { Native* native; public: Managed() { native = new Native(); } ~Managed() { delete native; } }; クラスの場合、ポインタに限る new/delete をお忘れなく auto_ptr<Native> 使用不可 インスタンスのコピー時に注意! 勝手に捨ててはくれません!

4 (1.2) Managed を Native の中に混ぜるには
ref class Managed { … }; class Native { gcroot<Managed^> managed; public: Native() { managed = gcnew Managed(); } ~Native() { delete native; } }; クラスの場合、ポインタに限る gcnew/delete をお忘れなく インスタンスのコピー時に注意! #include <vcclr.h> しませう! ※#include <msclr/auto_gcroot.h>   auto_gcroot<M^> → Managed版 auto_ptr

5 (2.1) System::String^ ⇔ std::wstring
// String^ ← wstring String^ to_cli(const wstring& str) { return gcnew String(str.c_str()); } // wstring ← String^ wstring from_cli(String^ str) { pin_ptr<wchar_t> result =           &(str->ToCharArray()[0]); return result;

6 (2.2) System::String^ ⇔ std::string
// String^ ← string String^ to_cli(const string& str) { return gcnew String(str.c_str()); } // string ← String^ string from_cli(String^ str) { void* ptr = Marshal::StringToHGlobalAnsi(str).ToPointer(); string result(static_cast<const char*>(ptr)); Marshal::FreeHGlobal(System::IntPtr(ptr)); return result; ( ゜Д゜)マンドクセー ※ System::Runtime::InteropServices::Marshal

7 View を C# , Model を C++/CLI で実装 C++ を NUnit でテストする
でもんすとらしおん Native と Managed の混在 .Net を(ちょびっと)利用した C++ View を C# , Model を C++/CLI で実装 C++ を NUnit でテストする

8 Let’s enjoy OOPing!


Download ppt "C++/CLI カクテル・レシピ episthmh (゚Д゚)ウマー Microsoft MVP, Visual C++"

Similar presentations


Ads by Google