diff foosdk/sdk/libPPUI/CPropVariant.h @ 1:20d02a178406 default tip

*: check in everything else yay
author Paper <paper@tflc.us>
date Mon, 05 Jan 2026 02:15:46 -0500
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/foosdk/sdk/libPPUI/CPropVariant.h	Mon Jan 05 02:15:46 2026 -0500
@@ -0,0 +1,54 @@
+#pragma once
+
+class CPropVariant : public PROPVARIANT {
+public:
+	CPropVariant() {init();}
+	~CPropVariant() {clear();}
+	CPropVariant( const CPropVariant & other ) {
+		init();
+		PropVariantCopy( this, &other );
+	}
+	const CPropVariant& operator=( const CPropVariant & other ) {
+		clear();
+		PropVariantCopy(this, &other);
+		return *this;
+	}
+
+	bool toInt64(int64_t & out) const {
+		switch( vt ) {
+		case VT_I1: out = (int64_t) cVal; return true;
+		case VT_I2: out = (int64_t) iVal; return true;
+		case VT_I4: out = (int64_t) lVal; return true;
+		case VT_I8: out = (int64_t) hVal.QuadPart; return true;
+		case VT_INT: out = (int64_t) intVal; return true;
+		default: return false;
+		}
+	}
+	bool toUint64(uint64_t & out) const {
+		switch( vt ) {
+		case VT_UI1: out = (uint64_t) bVal; return true;
+		case VT_UI2: out = (uint64_t) uiVal; return true;
+		case VT_UI4: out = (uint64_t) ulVal; return true;
+		case VT_UI8: out = (uint64_t) uhVal.QuadPart; return true;
+		case VT_UINT: out = (uint64_t) uintVal; return true;
+		default: return false;
+		}
+	}
+	bool toString( pfc::string_base & out ) const {
+		switch( vt ) {
+		case VT_LPSTR:
+			out = pfc::stringcvt::string_utf8_from_ansi( pszVal ); return true;
+		case VT_LPWSTR:
+			out = pfc::stringcvt::string_utf8_from_wide( pwszVal ); return true;
+		default: return false;
+		}
+	}
+private:
+	void clear() {
+		PropVariantClear( this );
+	}
+	void init() {
+		PROPVARIANT * pv = this;
+		PropVariantInit( pv );
+	}
+};