summaryrefslogtreecommitdiff
path: root/tests/src/Interop
diff options
context:
space:
mode:
authorYi Zhang (CLR) <yzha@microsoft.com>2016-04-08 23:22:51 -0700
committerYi Zhang (CLR) <yzha@microsoft.com>2016-04-09 12:27:53 -0700
commita1ffff4a8e305c1e06548aee8cdc43a091fab3ac (patch)
treed503274ee52a342099f16539b40c1896e5cd26ec /tests/src/Interop
parent643fc4af4d30730909d6fbcfba71df8c71ee4ab3 (diff)
downloadcoreclr-a1ffff4a8e305c1e06548aee8cdc43a091fab3ac.tar.gz
coreclr-a1ffff4a8e305c1e06548aee8cdc43a091fab3ac.tar.bz2
coreclr-a1ffff4a8e305c1e06548aee8cdc43a091fab3ac.zip
Fix GetObjectForNativeVariant test issue. It should roundtrip the actual object instead of IntPtr. Also add proper variant clean up code.
NOTE that I had to keep Marshal.IUnknownForObject call to force COM initialization.
Diffstat (limited to 'tests/src/Interop')
-rw-r--r--tests/src/Interop/MarshalAPI/GetObjectForNativeVariant/GetObjectForNativeVariant.cs34
1 files changed, 29 insertions, 5 deletions
diff --git a/tests/src/Interop/MarshalAPI/GetObjectForNativeVariant/GetObjectForNativeVariant.cs b/tests/src/Interop/MarshalAPI/GetObjectForNativeVariant/GetObjectForNativeVariant.cs
index 5880a74518..00710a37bc 100644
--- a/tests/src/Interop/MarshalAPI/GetObjectForNativeVariant/GetObjectForNativeVariant.cs
+++ b/tests/src/Interop/MarshalAPI/GetObjectForNativeVariant/GetObjectForNativeVariant.cs
@@ -59,6 +59,15 @@ public class GetObjectForNativeVariantTest
Assert.Throws<ArgumentNullException>(() => Marshal.GetObjectForNativeVariant<int>(IntPtr.Zero));
}
+ [DllImport(@"oleaut32.dll", SetLastError = true, CallingConvention = CallingConvention.StdCall)]
+ static extern Int32 VariantClear(IntPtr pvarg);
+
+ private static void DeleteVariant(IntPtr pVariant)
+ {
+ VariantClear(pVariant);
+ Marshal.FreeHGlobal(pVariant);
+ }
+
public static void Decimal()
{
Variant v = new Variant();
@@ -66,6 +75,8 @@ public class GetObjectForNativeVariantTest
Marshal.GetNativeVariantForObject(3.14m, pNative);
decimal d = Marshal.GetObjectForNativeVariant<decimal>(pNative);
Assert.AreEqual(3.14m, d);
+
+ DeleteVariant(pNative);
}
public static void PrimitiveType()
@@ -75,6 +86,8 @@ public class GetObjectForNativeVariantTest
Marshal.GetNativeVariantForObject<ushort>(99, pNative);
ushort actual = Marshal.GetObjectForNativeVariant<ushort>(pNative);
Assert.AreEqual(99, actual);
+
+ DeleteVariant(pNative);
}
public static void StringType()
@@ -84,6 +97,8 @@ public class GetObjectForNativeVariantTest
Marshal.GetNativeVariantForObject<string>("99", pNative);
string actual = Marshal.GetObjectForNativeVariant<string>(pNative);
Assert.AreEqual("99", actual);
+
+ DeleteVariant(pNative);
}
public static void DoubleType()
@@ -93,21 +108,30 @@ public class GetObjectForNativeVariantTest
Marshal.GetNativeVariantForObject<double>(3.14, pNative);
double actual = Marshal.GetObjectForNativeVariant<double>(pNative);
Assert.AreEqual(3.14, actual);
+
+ DeleteVariant(pNative);
}
public static void IUnknownType()
{
Variant v = new Variant();
- IntPtr pObj = Marshal.GetIUnknownForObject(new object());
+ object obj = new object();
+
+ // Technically we don't need this - but this is necessary for forcing
+ // COM initialization
+ IntPtr pUnk = Marshal.GetIUnknownForObject(obj);
IntPtr pNative = Marshal.AllocHGlobal(Marshal.SizeOf(v));
- Marshal.GetNativeVariantForObject<IntPtr>(pObj, pNative);
- IntPtr pActualObj = Marshal.GetObjectForNativeVariant<IntPtr>(pNative);
- Assert.AreEqual(pObj, pActualObj);
+ Marshal.GetNativeVariantForObject<object>(obj, pNative);
+ object actual = Marshal.GetObjectForNativeVariant<object>(pNative);
+ Assert.AreEqual(obj, actual);
+ Marshal.Release(pUnk);
+
+ DeleteVariant(pNative);
}
public static int Main(String[] unusedArgs)
{
- //IUnknownType();
+ IUnknownType();
DoubleType();
StringType();
PrimitiveType();