MCPcopy Create free account
hub / github.com/AutoHotkey/AutoHotkey / VariantToToken

Function VariantToToken

source/script_com.cpp:589–736  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

587
588
589void VariantToToken(VARIANT &aVar, ResultToken &aToken, bool aRetainVar = true)
590{
591 aToken.mem_to_free = NULL; // Set default.
592 switch (aVar.vt)
593 {
594 case VT_BSTR:
595 aToken.symbol = SYM_STRING;
596 aToken.marker = _T(""); // Set default.
597 aToken.marker_length = 0;
598 size_t len;
599 if (len = SysStringLen(aVar.bstrVal))
600 {
601#ifdef UNICODE
602 if (aRetainVar)
603 {
604 // It's safe to pass back the actual BSTR from aVar in this case.
605 aToken.marker = aVar.bstrVal;
606 aToken.marker_length = len;
607 }
608 else
609 {
610 // Allocate some memory to pass back to caller:
611 aToken.Malloc(aVar.bstrVal, len);
612 }
613#else
614 CStringCharFromWChar buf(aVar.bstrVal, len);
615 len = buf.GetLength(); // Get ANSI length.
616 if (aToken.mem_to_free = buf.DetachBuffer())
617 {
618 aToken.marker = aToken.mem_to_free;
619 aToken.marker_length = len;
620 }
621#endif
622 }
623 if (!aRetainVar)
624 VariantClear(&aVar);
625 break;
626 case VT_I4:
627 aToken.symbol = SYM_INTEGER;
628 aToken.value_int64 = aVar.lVal;
629 break;
630 case VT_R8:
631 aToken.symbol = SYM_FLOAT;
632 aToken.value_double = aVar.dblVal;
633 break;
634 case VT_R4:
635 aToken.symbol = SYM_FLOAT;
636 aToken.value_double = (double)aVar.fltVal;
637 break;
638 case VT_BOOL:
639 aToken.symbol = SYM_INTEGER;
640 aToken.value_int64 = aVar.iVal != VARIANT_FALSE;
641 break;
642 case VT_UNKNOWN:
643 if (aVar.punkVal)
644 {
645 IEnumVARIANT *penum;
646 if (SUCCEEDED(aVar.punkVal->QueryInterface(IID_IEnumVARIANT, (void**) &penum)))

Callers 3

AssignVariantFunction · 0.85
VarTypeToTokenFunction · 0.85
InvokeMethod · 0.85

Calls 7

SafeSetTokenObjectFunction · 0.85
GetLengthMethod · 0.80
DetachBufferMethod · 0.80
QueryInterfaceMethod · 0.80
MallocMethod · 0.45
ReleaseMethod · 0.45
AddRefMethod · 0.45

Tested by

no test coverage detected