Mercurial > projects > dwt-win
comparison dwt/ole/win32/Variant.d @ 300:acf6957f2344
OLE fixes, thanks to Enzo Petrelli.
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Thu, 28 Aug 2008 15:12:24 +0200 |
parents | fd9c62a2998e |
children |
comparison
equal
deleted
inserted
replaced
299:4faf63f6948f | 300:acf6957f2344 |
---|---|
481 COM.VariantInit(pData); | 481 COM.VariantInit(pData); |
482 | 482 |
483 // set type | 483 // set type |
484 pData.vt = type; | 484 pData.vt = type; |
485 if ((type & COM.VT_BYREF) is COM.VT_BYREF) { | 485 if ((type & COM.VT_BYREF) is COM.VT_BYREF) { |
486 COM.MoveMemory(pData, &type, 2); | 486 COM.MoveMemory((cast(void*)pData), &type, 2); |
487 COM.MoveMemory(pData + 8, &byRefPtr, 4); | 487 COM.MoveMemory((cast(void*)pData) + 8, &byRefPtr, 4); |
488 return; | 488 return; |
489 } | 489 } |
490 | 490 |
491 switch (type) { | 491 switch (type) { |
492 case COM.VT_EMPTY : | 492 case COM.VT_EMPTY : |
493 case COM.VT_NULL : | 493 case COM.VT_NULL : |
494 COM.MoveMemory(pData, &type, 2); | 494 COM.MoveMemory((cast(void*)pData), &type, 2); |
495 break; | 495 break; |
496 case COM.VT_BOOL : | 496 case COM.VT_BOOL : |
497 COM.MoveMemory(pData, &type, 2); | 497 COM.MoveMemory((cast(void*)pData), &type, 2); |
498 auto v = booleanData ? COM.VARIANT_TRUE : COM.VARIANT_FALSE; | 498 auto v = booleanData ? COM.VARIANT_TRUE : COM.VARIANT_FALSE; |
499 COM.MoveMemory(pData + 8, &v, 2); | 499 COM.MoveMemory((cast(void*)pData) + 8, &v, 2); |
500 break; | 500 break; |
501 case COM.VT_I1 : | 501 case COM.VT_I1 : |
502 COM.MoveMemory(pData, &type, 2); | 502 COM.MoveMemory((cast(void*)pData), &type, 2); |
503 COM.MoveMemory(pData + 8, &byteData, 1); | 503 COM.MoveMemory((cast(void*)pData) + 8, &byteData, 1); |
504 break; | 504 break; |
505 case COM.VT_I2 : | 505 case COM.VT_I2 : |
506 COM.MoveMemory(pData, &type, 2); | 506 COM.MoveMemory((cast(void*)pData), &type, 2); |
507 COM.MoveMemory(pData + 8, &shortData, 2); | 507 COM.MoveMemory((cast(void*)pData) + 8, &shortData, 2); |
508 break; | 508 break; |
509 case COM.VT_UI2 : | 509 case COM.VT_UI2 : |
510 COM.MoveMemory(pData, &type, 2); | 510 COM.MoveMemory((cast(void*)pData), &type, 2); |
511 COM.MoveMemory(pData + 8, &charData, 2); | 511 COM.MoveMemory((cast(void*)pData) + 8, &charData, 2); |
512 break; | 512 break; |
513 case COM.VT_I4 : | 513 case COM.VT_I4 : |
514 COM.MoveMemory(pData, &type, 2); | 514 COM.MoveMemory((cast(void*)pData), &type, 2); |
515 COM.MoveMemory(pData + 8, &intData, 4); | 515 COM.MoveMemory((cast(void*)pData) + 8, &intData, 4); |
516 break; | 516 break; |
517 case COM.VT_I8 : | 517 case COM.VT_I8 : |
518 COM.MoveMemory(pData, &type, 2); | 518 COM.MoveMemory((cast(void*)pData), &type, 2); |
519 COM.MoveMemory(pData + 8, &longData, 8); | 519 COM.MoveMemory((cast(void*)pData) + 8, &longData, 8); |
520 break; | 520 break; |
521 case COM.VT_R4 : | 521 case COM.VT_R4 : |
522 COM.MoveMemory(pData, &type, 2); | 522 COM.MoveMemory((cast(void*)pData), &type, 2); |
523 COM.MoveMemory(pData + 8, &floatData, 4); | 523 COM.MoveMemory((cast(void*)pData) + 8, &floatData, 4); |
524 break; | 524 break; |
525 case COM.VT_R8 : | 525 case COM.VT_R8 : |
526 COM.MoveMemory(pData, &type, 2); | 526 COM.MoveMemory((cast(void*)pData), &type, 2); |
527 COM.MoveMemory(pData + 8, &doubleData, 8); | 527 COM.MoveMemory((cast(void*)pData) + 8, &doubleData, 8); |
528 break; | 528 break; |
529 case COM.VT_DISPATCH : | 529 case COM.VT_DISPATCH : |
530 dispatchData.AddRef(); | 530 dispatchData.AddRef(); |
531 COM.MoveMemory(pData, &type, 2); | 531 COM.MoveMemory((cast(void*)pData), &type, 2); |
532 auto v = cast(void*)dispatchData; | 532 auto v = cast(void*)dispatchData; |
533 COM.MoveMemory(pData + 8, &v, 4); | 533 COM.MoveMemory((cast(void*)pData) + 8, &v, 4); |
534 break; | 534 break; |
535 case COM.VT_UNKNOWN : | 535 case COM.VT_UNKNOWN : |
536 unknownData.AddRef(); | 536 unknownData.AddRef(); |
537 COM.MoveMemory(pData, &type, 2); | 537 COM.MoveMemory((cast(void*)pData), &type, 2); |
538 auto v = cast(void*)dispatchData; | 538 auto v = cast(void*)dispatchData; |
539 COM.MoveMemory(pData + 8, &v, 4); | 539 COM.MoveMemory((cast(void*)pData) + 8, &v, 4); |
540 break; | 540 break; |
541 case COM.VT_BSTR : | 541 case COM.VT_BSTR : |
542 COM.MoveMemory(pData, &type, 2); | 542 COM.MoveMemory((cast(void*)pData), &type, 2); |
543 wchar[] data = StrToWCHARs(stringData); | 543 wchar[] data = StrToWCHARs(stringData); |
544 auto ptr = COM.SysAllocString(data.ptr); | 544 auto ptr = COM.SysAllocString(data.ptr); |
545 COM.MoveMemory(pData + 8, &ptr, 4); | 545 COM.MoveMemory((cast(void*)pData) + 8, &ptr, 4); |
546 break; | 546 break; |
547 | 547 |
548 default : | 548 default : |
549 OLE.error(DWT.ERROR_NOT_IMPLEMENTED); | 549 OLE.error(DWT.ERROR_NOT_IMPLEMENTED); |
550 } | 550 } |
894 | 894 |
895 void setData(VARIANT* pData){ | 895 void setData(VARIANT* pData){ |
896 if (pData is null) OLE.error(OLE.ERROR_INVALID_ARGUMENT); | 896 if (pData is null) OLE.error(OLE.ERROR_INVALID_ARGUMENT); |
897 | 897 |
898 short[1] dataType ; | 898 short[1] dataType ; |
899 COM.MoveMemory(dataType.ptr, pData, 2); | 899 COM.MoveMemory(dataType.ptr, (cast(void*)pData), 2); |
900 type = dataType[0]; | 900 type = dataType[0]; |
901 | 901 |
902 if ((type & COM.VT_BYREF) is COM.VT_BYREF) { | 902 if ((type & COM.VT_BYREF) is COM.VT_BYREF) { |
903 void*[1] newByRefPtr; | 903 void*[1] newByRefPtr; |
904 OS.MoveMemory(newByRefPtr.ptr, pData + 8, 4); | 904 OS.MoveMemory(newByRefPtr.ptr, (cast(void*)pData) + 8, 4); |
905 byRefPtr = newByRefPtr[0]; | 905 byRefPtr = newByRefPtr[0]; |
906 return; | 906 return; |
907 } | 907 } |
908 | 908 |
909 switch (type) { | 909 switch (type) { |
910 case COM.VT_EMPTY : | 910 case COM.VT_EMPTY : |
911 case COM.VT_NULL : | 911 case COM.VT_NULL : |
912 break; | 912 break; |
913 case COM.VT_BOOL : | 913 case COM.VT_BOOL : |
914 short[1] newBooleanData; | 914 short[1] newBooleanData; |
915 COM.MoveMemory(newBooleanData.ptr, pData + 8, 2); | 915 COM.MoveMemory(newBooleanData.ptr, (cast(void*)pData) + 8, 2); |
916 booleanData = (newBooleanData[0] !is COM.VARIANT_FALSE); | 916 booleanData = (newBooleanData[0] !is COM.VARIANT_FALSE); |
917 break; | 917 break; |
918 case COM.VT_I1 : | 918 case COM.VT_I1 : |
919 byte[1] newByteData; | 919 byte[1] newByteData; |
920 COM.MoveMemory(newByteData.ptr, pData + 8, 1); | 920 COM.MoveMemory(newByteData.ptr, (cast(void*)pData) + 8, 1); |
921 byteData = newByteData[0]; | 921 byteData = newByteData[0]; |
922 break; | 922 break; |
923 case COM.VT_I2 : | 923 case COM.VT_I2 : |
924 short[1] newShortData; | 924 short[1] newShortData; |
925 COM.MoveMemory(newShortData.ptr, pData + 8, 2); | 925 COM.MoveMemory(newShortData.ptr, (cast(void*)pData) + 8, 2); |
926 shortData = newShortData[0]; | 926 shortData = newShortData[0]; |
927 break; | 927 break; |
928 case COM.VT_UI2 : | 928 case COM.VT_UI2 : |
929 wchar[1] newCharData; | 929 wchar[1] newCharData; |
930 COM.MoveMemory(newCharData.ptr, pData + 8, 2); | 930 COM.MoveMemory(newCharData.ptr, (cast(void*)pData) + 8, 2); |
931 charData = newCharData[0]; | 931 charData = newCharData[0]; |
932 break; | 932 break; |
933 case COM.VT_I4 : | 933 case COM.VT_I4 : |
934 int[1] newIntData; | 934 int[1] newIntData; |
935 OS.MoveMemory(newIntData.ptr, pData + 8, 4); | 935 OS.MoveMemory(newIntData.ptr, (cast(void*)pData) + 8, 4); |
936 intData = newIntData[0]; | 936 intData = newIntData[0]; |
937 break; | 937 break; |
938 case COM.VT_I8 : | 938 case COM.VT_I8 : |
939 long[1] newLongData; | 939 long[1] newLongData; |
940 OS.MoveMemory(newLongData.ptr, pData + 8, 8); | 940 OS.MoveMemory(newLongData.ptr, (cast(void*)pData) + 8, 8); |
941 longData = newLongData[0]; | 941 longData = newLongData[0]; |
942 break; | 942 break; |
943 case COM.VT_R4 : | 943 case COM.VT_R4 : |
944 float[1] newFloatData; | 944 float[1] newFloatData; |
945 COM.MoveMemory(newFloatData.ptr, pData + 8, 4); | 945 COM.MoveMemory(newFloatData.ptr, (cast(void*)pData) + 8, 4); |
946 floatData = newFloatData[0]; | 946 floatData = newFloatData[0]; |
947 break; | 947 break; |
948 case COM.VT_R8 : | 948 case COM.VT_R8 : |
949 double[1] newDoubleData; | 949 double[1] newDoubleData; |
950 COM.MoveMemory(newDoubleData.ptr, pData + 8, 8); | 950 COM.MoveMemory(newDoubleData.ptr, (cast(void*)pData) + 8, 8); |
951 doubleData = newDoubleData[0]; | 951 doubleData = newDoubleData[0]; |
952 break; | 952 break; |
953 case COM.VT_DISPATCH : { | 953 case COM.VT_DISPATCH : { |
954 IDispatch[1] ppvObject; | 954 IDispatch[1] ppvObject; |
955 OS.MoveMemory(ppvObject.ptr, pData + 8, 4); | 955 OS.MoveMemory(ppvObject.ptr, (cast(void*)pData) + 8, 4); |
956 if (ppvObject[0] is null) { | 956 if (ppvObject[0] is null) { |
957 type = COM.VT_EMPTY; | 957 type = COM.VT_EMPTY; |
958 break; | 958 break; |
959 } | 959 } |
960 dispatchData = ppvObject[0]; | 960 dispatchData = ppvObject[0]; |
961 dispatchData.AddRef(); | 961 dispatchData.AddRef(); |
962 break; | 962 break; |
963 } | 963 } |
964 case COM.VT_UNKNOWN : { | 964 case COM.VT_UNKNOWN : { |
965 IUnknown[1] ppvObject; | 965 IUnknown[1] ppvObject; |
966 OS.MoveMemory(ppvObject.ptr, pData + 8, 4); | 966 OS.MoveMemory(ppvObject.ptr, (cast(void*)pData) + 8, 4); |
967 if (ppvObject[0] is null) { | 967 if (ppvObject[0] is null) { |
968 type = COM.VT_EMPTY; | 968 type = COM.VT_EMPTY; |
969 break; | 969 break; |
970 } | 970 } |
971 unknownData = ppvObject[0]; | 971 unknownData = ppvObject[0]; |
973 break; | 973 break; |
974 } | 974 } |
975 case COM.VT_BSTR : | 975 case COM.VT_BSTR : |
976 // get the address of the memory in which the string resides | 976 // get the address of the memory in which the string resides |
977 wchar*[1] hMem; | 977 wchar*[1] hMem; |
978 OS.MoveMemory(hMem.ptr, pData + 8, 4); | 978 OS.MoveMemory(hMem.ptr, (cast(void*)pData) + 8, 4); |
979 if (hMem[0] is null) { | 979 if (hMem[0] is null) { |
980 type = COM.VT_EMPTY; | 980 type = COM.VT_EMPTY; |
981 break; | 981 break; |
982 } | 982 } |
983 // Get the size of the string from the OS - the size is expressed in number | 983 // Get the size of the string from the OS - the size is expressed in number |