public void TestVariantToString() { VariantStruct variantStruct = default(VariantStruct); variantStruct.vt = (short)VarEnum.VT_BSTR; variantStruct.ptr = Marshal.StringToBSTR("test string"); IntPtr nativeVariant = Marshal.AllocCoTaskMem(Marshal.SizeOf(typeof(VariantStruct))); Marshal.StructureToPtr(variantStruct, nativeVariant, false); try { Assert.AreEqual("test string", Marshal.GetObjectForNativeVariant(nativeVariant)); } catch (PlatformNotSupportedException e) { // FULLAOT Marshal.FreeBSTR(variantStruct.ptr); Marshal.FreeCoTaskMem(nativeVariant); return; } Marshal.FreeBSTR(variantStruct.ptr); variantStruct.ptr = IntPtr.Zero; Marshal.StructureToPtr(variantStruct, nativeVariant, false); Assert.IsNull(Marshal.GetObjectForNativeVariant(nativeVariant)); Marshal.FreeCoTaskMem(nativeVariant); }
public void TestStringToVariant() { IntPtr nativeVariant = Marshal.AllocCoTaskMem(Marshal.SizeOf(typeof(VariantStruct))); try { Marshal.GetNativeVariantForObject("test string", nativeVariant); } catch (PlatformNotSupportedException e) { // FULLAOT Marshal.FreeCoTaskMem(nativeVariant); return; } VariantStruct variantStruct = (VariantStruct)Marshal.PtrToStructure(nativeVariant, typeof(VariantStruct)); Marshal.FreeCoTaskMem(nativeVariant); Assert.AreEqual((short)VarEnum.VT_BSTR, variantStruct.vt); Assert.AreEqual("test string", Marshal.PtrToStringBSTR(variantStruct.ptr)); Marshal.FreeBSTR(variantStruct.ptr); }