private static void PropVariant() { Ole32.PROPVARIANT pv; // SafeArray pv = new Ole32.PROPVARIANT(new object[] { 1, DateTime.Now, Guid.NewGuid() }); AddTestResult(null, pv.ToString(), pv.parray); pv = new Ole32.PROPVARIANT(new object[] { 1, 2, 3 }); AddTestResult(null, pv.ToString(), pv.parray); // Struct var ms = new SafeCoTaskMemString("TESTFMT"); pv = new Ole32.PROPVARIANT(new[] { new Ole32.CLIPDATA(ms.DangerousGetHandle(), ms.Length), new Ole32.CLIPDATA(0xCFF) }); AddTestResult(null, pv.ToString(), pv.caclipdata.ToArray()[0].ulClipFmt); // Dates pv = new Ole32.PROPVARIANT((DateTime?)null); AddTestResult(null, pv.ToString(), pv.pdate); pv = new Ole32.PROPVARIANT(DateTime.Now.AddYears(-500)); AddTestResult(null, pv.ToString(), pv.Value); pv = new Ole32.PROPVARIANT(DateTime.Now); AddTestResult(null, pv.ToString(), new[] { pv.Value, pv.date, pv.pdate }); pv = new Ole32.PROPVARIANT(DateTime.Now, VarEnum.VT_FILETIME); AddTestResult(null, pv.ToString(), pv.filetime.ToString(null)); pv = new Ole32.PROPVARIANT(new[] { DateTime.Now, DateTime.Today, DateTime.MaxValue }); AddTestResult(null, pv.ToString(), pv.cadate); // FILETIME var ft = DateTime.Now.ToFileTimeStruct(); pv = new Ole32.PROPVARIANT(ft); AddTestResult(null, pv.ToString(), pv.filetime.ToString(null)); pv = new Ole32.PROPVARIANT(new[] { ft, ft }); AddTestResult(null, pv.ToString(), pv.cafiletime?.Select(f => f.ToString("G"))); pv = new Ole32.PROPVARIANT(new[] { DateTime.Now, DateTime.Today, DateTime.MaxValue }, VarEnum.VT_FILETIME); AddTestResult(null, pv.ToString(), pv.cafiletime?.Select(f => f.ToString("G"))); // Bool pv = new Ole32.PROPVARIANT(true); AddTestResult(null, pv.ToString(), new[] { pv.pboolVal, pv.boolVal }); pv = new Ole32.PROPVARIANT(new[] { true, false, true, false }); AddTestResult(null, pv.ToString(), pv.cabool); PropSys.InitPropVariantFromBooleanVector(new[] { true, false, true, false }, 4, pv); AddTestResult(null, pv.ToString(), pv.cabool); AddTestResult(null, pv.ToString(), pv.cai); // Int pv = new Ole32.PROPVARIANT((int?)null); AddTestResult(null, pv.ToString(), pv.plVal); pv = new Ole32.PROPVARIANT(3); AddTestResult(null, pv.ToString(), new[] { pv.Value, pv.bVal, pv.cVal, pv.iVal, pv.uiVal, pv.intVal, pv.lVal, pv.uintVal, pv.ulVal, pv.hVal, pv.uhVal, pv.scode }); pv = new Ole32.PROPVARIANT(new Win32Error(5)); AddTestResult(null, pv.ToString(), $"{pv.lVal}/{(int)pv.scode}"); pv = new Ole32.PROPVARIANT(new[] { 0, 1, 2 }); AddTestResult(null, pv.ToString(), pv.cal); // Decimal pv = new Ole32.PROPVARIANT(3.3m); AddTestResult(null, pv.ToString(), new[] { pv.Value, pv.pdecVal, pv.bVal, pv.cVal, pv.iVal, pv.uiVal, pv.intVal, pv.lVal, pv.uintVal, pv.ulVal, pv.hVal, pv.uhVal, pv.fltVal, pv.dblVal }); pv = new Ole32.PROPVARIANT(3.3m, VarEnum.VT_CY); AddTestResult(null, pv.ToString(), new[] { pv.Value, pv.pdecVal, pv.cyVal, pv.pcyVal }); pv = new Ole32.PROPVARIANT(new[] { 0m, 1m, 2m }, VarEnum.VT_CY); AddTestResult(null, pv.ToString(), pv.cacy); // Single/double precision pv = new Ole32.PROPVARIANT(3.3f); AddTestResult(null, pv.ToString(), new[] { pv.Value, pv.fltVal, pv.dblVal, pv.pdecVal, pv.bVal, pv.cVal, pv.iVal, pv.uiVal, pv.intVal, pv.lVal, pv.uintVal, pv.ulVal, pv.hVal, pv.uhVal }); pv = new Ole32.PROPVARIANT(3.3); AddTestResult(null, pv.ToString(), new[] { pv.Value, pv.fltVal, pv.dblVal }); pv = new Ole32.PROPVARIANT(new[] { 0.0f, 1.1f, 2.2f }); AddTestResult(null, pv.ToString(), pv.caflt); pv = new Ole32.PROPVARIANT(new[] { 0.0, 1.1, 2.2 }); AddTestResult(null, pv.ToString(), pv.cadbl); // Byte pv = new Ole32.PROPVARIANT((byte)3); AddTestResult(null, pv.ToString(), pv.bVal); pv = new Ole32.PROPVARIANT(new byte[] { 0, 1, 2 }); AddTestResult(null, pv.ToString(), pv.caub); // Guid pv = new Ole32.PROPVARIANT(Guid.NewGuid()); AddTestResult(null, pv.ToString(), pv.puuid); pv = new Ole32.PROPVARIANT(new[] { Guid.NewGuid(), Guid.NewGuid() }); AddTestResult(null, pv.ToString(), pv.cauuid); // String pv = new Ole32.PROPVARIANT("TestNoVTVal"); AddTestResult(null, pv.ToString(), new[] { pv.Value, pv.pszVal, pv.pwszVal, pv.bstrVal, pv.pbstrVal }); pv = new Ole32.PROPVARIANT("TestBSTR", VarEnum.VT_BSTR); AddTestResult(null, pv.ToString(), new[] { pv.Value, pv.pszVal, pv.pwszVal, pv.bstrVal, pv.pbstrVal }); pv = new Ole32.PROPVARIANT("TestLPSTR", VarEnum.VT_LPSTR); AddTestResult(null, pv.ToString(), new[] { pv.Value, pv.pszVal, pv.pwszVal, pv.bstrVal, pv.pbstrVal }); pv = new Ole32.PROPVARIANT("TestLPWSTR", VarEnum.VT_LPWSTR); AddTestResult(null, pv.ToString(), new[] { pv.Value, pv.pszVal, pv.pwszVal, pv.bstrVal, pv.pbstrVal }); pv = new Ole32.PROPVARIANT(new[] { "TestStrVec", "X" }); AddTestResult(null, pv.ToString(), pv.calpwstr); pv = new Ole32.PROPVARIANT(new[] { 1, 2, 3 }, VarEnum.VT_LPWSTR); AddTestResult(null, pv.ToString(), pv.calpwstr); PropSys.InitPropVariantFromStringVector(new[] { "TestStrVec", "X" }, 2, pv); AddTestResult(null, pv.ToString(), pv.calpwstr); }