|
@@ -313,14 +313,24 @@ namespace System
|
|
if (IsObject)
|
|
if (IsObject)
|
|
return .Err;
|
|
return .Err;
|
|
|
|
|
|
|
|
+ var self = this;
|
|
var type = VariantType;
|
|
var type = VariantType;
|
|
|
|
+ void* dataPtr = self.DataPtr;
|
|
|
|
+ if (type.IsPointer)
|
|
|
|
+ {
|
|
|
|
+ type = type.UnderlyingType;
|
|
|
|
+ var boxedType = type.BoxedType;
|
|
|
|
+ if (boxedType == null)
|
|
|
|
+ return .Err;
|
|
|
|
+ dataPtr = (void*)mData;
|
|
|
|
+ }
|
|
|
|
+
|
|
var boxedType = type.BoxedType;
|
|
var boxedType = type.BoxedType;
|
|
if (boxedType == null)
|
|
if (boxedType == null)
|
|
return .Err;
|
|
return .Err;
|
|
|
|
|
|
- var self = this;
|
|
|
|
var object = Try!(boxedType.CreateObject());
|
|
var object = Try!(boxedType.CreateObject());
|
|
- Internal.MemCpy((uint8*)Internal.UnsafeCastToPtr(object) + boxedType.[Friend]mMemberDataOffset, self.DataPtr, type.Size);
|
|
|
|
|
|
+ Internal.MemCpy((uint8*)Internal.UnsafeCastToPtr(object) + boxedType.[Friend]mMemberDataOffset, dataPtr, type.Size);
|
|
return object;
|
|
return object;
|
|
}
|
|
}
|
|
|
|
|