38 #include "NeptuneException.h" 53 static void ThrowOnError(NPT_Result r)
61 static void ThrowOnErrorButNoSuchItem(NPT_Result r)
63 if (NPT_FAILED(r) && (r != NPT_ERROR_NO_SUCH_ITEM))
72 static Type^ ParseType(
const NPT_String& upnpType)
79 return String::typeid;
85 return Boolean::typeid;
91 return UInt16::typeid;
94 return UInt32::typeid;
100 return Int16::typeid;
102 if ((s ==
"i4") || (s ==
"int"))
103 return Int32::typeid;
105 if ((s ==
"r4") || (s ==
"float"))
106 return Single::typeid;
108 if ((s ==
"r8") || (s ==
"number") || (s ==
"fixed.14.4"))
109 return Double::typeid;
111 if ((s ==
"date") || (s ==
"datetime") || (s ==
"datetime.tz"))
112 return DateTime::typeid;
114 if ((s ==
"time") || (s ==
"time.tz"))
115 return UInt64::typeid;
117 if ((s ==
"bin.base64") || (s ==
"bin.hex"))
118 return array<Byte>::typeid;
126 throw gcnew ArgumentException(
"unknown type",
"upnpType");
131 return ConvertValue(ParseType(targetType), val);
134 static Object^ ConvertValue(Type^ targetType,
const NPT_String& val)
136 String^ strVal =
gcnew String(val);
138 if (targetType == String::typeid)
141 if (targetType == Char::typeid)
144 throw gcnew ArgumentException(
"character value is empty",
"val");
149 if (targetType == Boolean::typeid)
150 return Convert::ToBoolean(strVal);
152 if (targetType == Byte::typeid)
153 return Convert::ToByte(strVal);
155 if (targetType == SByte::typeid)
156 return Convert::ToSByte(strVal);
158 if (targetType == UInt16::typeid)
159 return Convert::ToUInt16(strVal);
161 if (targetType == UInt32::typeid)
162 return Convert::ToUInt32(strVal);
164 if (targetType == UInt64::typeid)
165 return Convert::ToUInt64(strVal);
167 if (targetType == Int16::typeid)
168 return Convert::ToInt16(strVal);
170 if (targetType == Int32::typeid)
171 return Convert::ToInt32(strVal);
173 if (targetType == Int64::typeid)
174 return Convert::ToInt64(strVal);
176 if (targetType == Single::typeid)
177 return Convert::ToSingle(strVal);
179 if (targetType == Double::typeid)
180 return Convert::ToDouble(strVal);
182 if (targetType == DateTime::typeid)
183 return Convert::ToDateTime(strVal);
185 if (targetType == array<Byte>::typeid)
186 return Convert::FromBase64String(strVal);
188 if (targetType == Uri::typeid)
189 return marshal_as<Uri^>(val);
191 if (targetType == Guid::typeid)
192 return gcnew Guid(strVal);
194 throw gcnew ArgumentException(
"unsupported type",
"targetType");
204 gcroot<msclr::interop::marshal_context^> c;
211 szAnsi(marshalString<E_UTF8>(s))
217 operator const char*()
const 220 return szAnsi.c_str();
232 szAnsi(static_cast<char*>(System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(s).ToPointer()))
238 System::Runtime::InteropServices::Marshal::FreeHGlobal(IntPtr(szAnsi));
241 operator LPCSTR()
const 255 szUnicode(static_cast<wchar_t*>(System::Runtime::InteropServices::Marshal::StringToHGlobalUni(s).ToPointer()))
261 System::Runtime::InteropServices::Marshal::FreeHGlobal(IntPtr(szUnicode));
264 operator LPCWSTR()
const 273 template<
typename T_NativeType>
278 T_NativeType* m_pHandle;
283 property T_NativeType& Handle
293 virtual Boolean Equals(Object^ obj)
override 298 if (!this->GetType()->IsInstanceOfType(obj))
308 m_pHandle =
new T_NativeType();
325 m_pHandle = &object_class;
337 if (m_pHandle != 0 && m_Owned)
348 #define PLATINUM_MANAGED_IMPLEMENT_PROPERTY(propertyType, propertyName, nativeVar, nativePtr) \ 349 property propertyType propertyName { \ 350 propertyType get() { \ 351 return (nativePtr##->##nativeVar); \ 353 void set(propertyType var) { \ 354 nativePtr##->##nativeVar = (var); \ 358 #define PLATINUM_MANAGED_IMPLEMENT_STRING_PROPERTY(propertyType, propertyName, nativeVar, nativePtr) \ 359 property propertyType propertyName { \ 360 propertyType get() { \ 361 return marshal_as<propertyType>(nativePtr##->##nativeVar); \ 363 void set(propertyType var) { \ 364 std::string s = marshalString<E_UTF8>(var); \ 365 nativePtr##->##nativeVar = s.c_str(); \ 369 #define PLATINUM_MANAGED_IMPLEMENT_OBJECT_PROPERTY(propertyType, propertyName, nativeVar, nativePtr) \ 370 property propertyType propertyName { \ 371 propertyType get() { \ 372 return marshal_as<propertyType>(nativePtr##->##nativeVar); \ 374 void set(propertyType var) { \ 375 nativePtr##->##nativeVar = var->Handle; \
Definition: Helpers.h:227
Definition: NeptuneException.h:42
Definition: Helpers.h:202
Definition: Helpers.h:274
Definition: Helpers.h:250
Definition: NptStrings.h:57