1 /*! 2 @file 3 @author Albert Semenov 4 @date 01/2009 5 @module 6 */ 7 #pragma once 8 9 #include <MyGUI.h> 10 #include "Utility.h" 11 12 namespace MyGUI 13 { 14 namespace Managed 15 { 16 17 class ObjectHolder 18 { 19 public: ObjectHolder()20 ObjectHolder() : object() { } object(_obj)21 ObjectHolder(System::Object ^ _obj) : object(_obj) { } ~ObjectHolder()22 ~ObjectHolder() { } 23 System::Object ^ toObject() 24 { 25 return object; 26 } 27 private: 28 gcroot < System::Object ^ > object; 29 }; 30 31 32 // базовые шаблоны для конвертации переменных и типов 33 template <typename T> struct Convert 34 { 35 typedef T Type; ToConvert36 static inline Type To(T _value) 37 { 38 return _value; 39 } FromConvert40 static inline T From(Type _value) 41 { 42 return _value; 43 } 44 }; 45 46 // перегрузка для базовых типов 47 template <> struct Convert<size_t> 48 { 49 typedef System::UInt32 Type; 50 inline static System::UInt32 To(size_t _value) 51 { 52 return System::UInt32(_value); 53 } 54 inline static size_t From(System::UInt32 _value) 55 { 56 return size_t(_value); 57 } 58 }; 59 template <> struct Convert<bool&> 60 { 61 typedef bool % Type; 62 inline static bool % To(bool& _value) 63 { 64 return reinterpret_cast<bool&>(_value); 65 } 66 }; 67 68 // перегрузка для строк 69 template <> struct Convert<const std::string&> 70 { 71 typedef System::String ^ Type; 72 inline static System::String ^ To(const std::string& _value) 73 { 74 return string_utility::utf8_to_managed(_value); 75 } 76 inline static std::string From(System::String ^ _value) 77 { 78 return string_utility::managed_to_utf8(_value); 79 } 80 }; 81 template <> struct Convert<const MyGUI::UString&> 82 { 83 typedef System::String ^ Type; 84 inline static System::String ^ To(const MyGUI::UString& _value) 85 { 86 return string_utility::utf16_to_managed(_value); 87 } 88 inline static MyGUI::UString From(System::String ^ _value) 89 { 90 return string_utility::managed_to_utf16(_value); 91 } 92 }; 93 template <> struct Convert<MyGUI::UString> 94 { 95 typedef System::String ^ Type; 96 inline static System::String ^ To(const MyGUI::UString& _value) 97 { 98 return string_utility::utf16_to_managed(_value); 99 } 100 inline static MyGUI::UString From(System::String ^ _value) 101 { 102 return string_utility::managed_to_utf16(_value); 103 } 104 }; 105 106 // прегрузка для Any 107 template <> struct Convert<MyGUI::Any> 108 { 109 typedef System::Object ^ Type; 110 inline static System::Object ^ To(MyGUI::Any _value) 111 { 112 ObjectHolder* data = _value.castType< ObjectHolder >(false); 113 return data ? data->toObject() : nullptr; 114 } 115 inline static MyGUI::Any From(System::Object ^ _value) 116 { 117 ObjectHolder data = _value; 118 return data; 119 } 120 }; 121 122 } // namespace Managed 123 } // namespace MyGUI 124