Wat is dit vreemd! Ik had iets waarbij hij 'intelligent' beslist welk variant type hij kiest bij een VarArrayCreate call (mocht het je interesseren: hier).
En vandaag krijg ik vrolijk een EVariantArrayCreateError op mijn bord. Blijkt hij varInt64 niet toe te laten, in VarUtils.pas blijkt er een CVarTypeToElementInfo te staan, en daar staat ValidBase: False. Vreemd.

Wat daar het verschil is tussen ValidBase en ValidElement, en waarom VarArrayCreate VarTypeIsValidArrayType gebruikt en niet VarTypeIsValidElementType, is me ook niet duidelijk. Waarom varUInt64 (die bij CMaxArrayVarType daarboven nog varWord64 wordt geheten!) dan weer beide false is me ook een raadsel.

Bij SafeArrayCreate staat inderdaad dat niet zomaar alles mag; array, byref en empty lijken me vanzelfsprekend, maar: "All other types are legal." dus int64's toch wel?

Vreemd. Iemand een idee? Ik ga voorlopig gewoon dit doen en dan kan ik al verder:
Delphi Code:
  1. if not(VarTypeIsValidArrayType(at)) then at:=varVariant;