Changeset 300:acf6957f2344
- Timestamp:
- 08/28/08 09:12:24
(3 months ago)
- Author:
- Frank Benoit <benoit@tionex.de>
- branch:
- default
- Message:
OLE fixes, thanks to Enzo Petrelli.
-
Files:
-
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
| r284 |
r300 |
|
| 1098 | 1098 | uint size; |
|---|
| 1099 | 1099 | auto rc = tempContents.Read(pv, 4, null); |
|---|
| 1100 | | OS.MoveMemory(size, pv, 4); |
|---|
| | 1100 | OS.MoveMemory(&size, pv, 4); |
|---|
| 1101 | 1101 | COM.CoTaskMemFree(pv); |
|---|
| 1102 | 1102 | if (rc is COM.S_OK && size > 0) { |
|---|
| r263 |
r300 |
|
| 505 | 505 | |
|---|
| 506 | 506 | // copy the menu item count information to the pointer |
|---|
| 507 | | COM.MoveMemory(lpMenuWidths + 8, &containerMenuCount, 4); |
|---|
| | 507 | COM.MoveMemory((cast(void*)lpMenuWidths) + 8, &containerMenuCount, 4); |
|---|
| 508 | 508 | |
|---|
| 509 | 509 | // Loop over all "Window-like" menus in the menubar and get information about the |
|---|
| … | … | |
| 530 | 530 | |
|---|
| 531 | 531 | // copy the menu item count information to the pointer |
|---|
| 532 | | COM.MoveMemory(lpMenuWidths + 16, &windowMenuCount, 4); |
|---|
| | 532 | COM.MoveMemory((cast(void*)lpMenuWidths) + 16, &windowMenuCount, 4); |
|---|
| 533 | 533 | |
|---|
| 534 | 534 | // free resources used in querying the OS |
|---|
| r246 |
r300 |
|
| 484 | 484 | pData.vt = type; |
|---|
| 485 | 485 | if ((type & COM.VT_BYREF) is COM.VT_BYREF) { |
|---|
| 486 | | COM.MoveMemory(pData, &type, 2); |
|---|
| 487 | | COM.MoveMemory(pData + 8, &byRefPtr, 4); |
|---|
| | 486 | COM.MoveMemory((cast(void*)pData), &type, 2); |
|---|
| | 487 | COM.MoveMemory((cast(void*)pData) + 8, &byRefPtr, 4); |
|---|
| 488 | 488 | return; |
|---|
| 489 | 489 | } |
|---|
| … | … | |
| 492 | 492 | case COM.VT_EMPTY : |
|---|
| 493 | 493 | case COM.VT_NULL : |
|---|
| 494 | | COM.MoveMemory(pData, &type, 2); |
|---|
| | 494 | COM.MoveMemory((cast(void*)pData), &type, 2); |
|---|
| 495 | 495 | break; |
|---|
| 496 | 496 | case COM.VT_BOOL : |
|---|
| 497 | | COM.MoveMemory(pData, &type, 2); |
|---|
| | 497 | COM.MoveMemory((cast(void*)pData), &type, 2); |
|---|
| 498 | 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 | 500 | break; |
|---|
| 501 | 501 | case COM.VT_I1 : |
|---|
| 502 | | COM.MoveMemory(pData, &type, 2); |
|---|
| 503 | | COM.MoveMemory(pData + 8, &byteData, 1); |
|---|
| | 502 | COM.MoveMemory((cast(void*)pData), &type, 2); |
|---|
| | 503 | COM.MoveMemory((cast(void*)pData) + 8, &byteData, 1); |
|---|
| 504 | 504 | break; |
|---|
| 505 | 505 | case COM.VT_I2 : |
|---|
| 506 | | COM.MoveMemory(pData, &type, 2); |
|---|
| 507 | | COM.MoveMemory(pData + 8, &shortData, 2); |
|---|
| | 506 | COM.MoveMemory((cast(void*)pData), &type, 2); |
|---|
| | 507 | COM.MoveMemory((cast(void*)pData) + 8, &shortData, 2); |
|---|
| 508 | 508 | break; |
|---|
| 509 | 509 | case COM.VT_UI2 : |
|---|
| 510 | | COM.MoveMemory(pData, &type, 2); |
|---|
| 511 | | COM.MoveMemory(pData + 8, &charData, 2); |
|---|
| | 510 | COM.MoveMemory((cast(void*)pData), &type, 2); |
|---|
| | 511 | COM.MoveMemory((cast(void*)pData) + 8, &charData, 2); |
|---|
| 512 | 512 | break; |
|---|
| 513 | 513 | case COM.VT_I4 : |
|---|
| 514 | | COM.MoveMemory(pData, &type, 2); |
|---|
| 515 | | COM.MoveMemory(pData + 8, &intData, 4); |
|---|
| | 514 | COM.MoveMemory((cast(void*)pData), &type, 2); |
|---|
| | 515 | COM.MoveMemory((cast(void*)pData) + 8, &intData, 4); |
|---|
| 516 | 516 | break; |
|---|
| 517 | 517 | case COM.VT_I8 : |
|---|
| 518 | | COM.MoveMemory(pData, &type, 2); |
|---|
| 519 | | COM.MoveMemory(pData + 8, &longData, 8); |
|---|
| | 518 | COM.MoveMemory((cast(void*)pData), &type, 2); |
|---|
| | 519 | COM.MoveMemory((cast(void*)pData) + 8, &longData, 8); |
|---|
| 520 | 520 | break; |
|---|
| 521 | 521 | case COM.VT_R4 : |
|---|
| 522 | | COM.MoveMemory(pData, &type, 2); |
|---|
| 523 | | COM.MoveMemory(pData + 8, &floatData, 4); |
|---|
| | 522 | COM.MoveMemory((cast(void*)pData), &type, 2); |
|---|
| | 523 | COM.MoveMemory((cast(void*)pData) + 8, &floatData, 4); |
|---|
| 524 | 524 | break; |
|---|
| 525 | 525 | case COM.VT_R8 : |
|---|
| 526 | | COM.MoveMemory(pData, &type, 2); |
|---|
| 527 | | COM.MoveMemory(pData + 8, &doubleData, 8); |
|---|
| | 526 | COM.MoveMemory((cast(void*)pData), &type, 2); |
|---|
| | 527 | COM.MoveMemory((cast(void*)pData) + 8, &doubleData, 8); |
|---|
| 528 | 528 | break; |
|---|
| 529 | 529 | case COM.VT_DISPATCH : |
|---|
| 530 | 530 | dispatchData.AddRef(); |
|---|
| 531 | | COM.MoveMemory(pData, &type, 2); |
|---|
| | 531 | COM.MoveMemory((cast(void*)pData), &type, 2); |
|---|
| 532 | 532 | auto v = cast(void*)dispatchData; |
|---|
| 533 | | COM.MoveMemory(pData + 8, &v, 4); |
|---|
| | 533 | COM.MoveMemory((cast(void*)pData) + 8, &v, 4); |
|---|
| 534 | 534 | break; |
|---|
| 535 | 535 | case COM.VT_UNKNOWN : |
|---|
| 536 | 536 | unknownData.AddRef(); |
|---|
| 537 | | COM.MoveMemory(pData, &type, 2); |
|---|
| | 537 | COM.MoveMemory((cast(void*)pData), &type, 2); |
|---|
| 538 | 538 | auto v = cast(void*)dispatchData; |
|---|
| 539 | | COM.MoveMemory(pData + 8, &v, 4); |
|---|
| | 539 | COM.MoveMemory((cast(void*)pData) + 8, &v, 4); |
|---|
| 540 | 540 | break; |
|---|
| 541 | 541 | case COM.VT_BSTR : |
|---|
| 542 | | COM.MoveMemory(pData, &type, 2); |
|---|
| | 542 | COM.MoveMemory((cast(void*)pData), &type, 2); |
|---|
| 543 | 543 | wchar[] data = StrToWCHARs(stringData); |
|---|
| 544 | 544 | auto ptr = COM.SysAllocString(data.ptr); |
|---|
| 545 | | COM.MoveMemory(pData + 8, &ptr, 4); |
|---|
| | 545 | COM.MoveMemory((cast(void*)pData) + 8, &ptr, 4); |
|---|
| 546 | 546 | break; |
|---|
| 547 | 547 | |
|---|
| … | … | |
| 897 | 897 | |
|---|
| 898 | 898 | short[1] dataType ; |
|---|
| 899 | | COM.MoveMemory(dataType.ptr, pData, 2); |
|---|
| | 899 | COM.MoveMemory(dataType.ptr, (cast(void*)pData), 2); |
|---|
| 900 | 900 | type = dataType[0]; |
|---|
| 901 | 901 | |
|---|
| 902 | 902 | if ((type & COM.VT_BYREF) is COM.VT_BYREF) { |
|---|
| 903 | 903 | void*[1] newByRefPtr; |
|---|
| 904 | | OS.MoveMemory(newByRefPtr.ptr, pData + 8, 4); |
|---|
| | 904 | OS.MoveMemory(newByRefPtr.ptr, (cast(void*)pData) + 8, 4); |
|---|
| 905 | 905 | byRefPtr = newByRefPtr[0]; |
|---|
| 906 | 906 | return; |
|---|
| … | … | |
| 913 | 913 | case COM.VT_BOOL : |
|---|
| 914 | 914 | short[1] newBooleanData; |
|---|
| 915 | | COM.MoveMemory(newBooleanData.ptr, pData + 8, 2); |
|---|
| | 915 | COM.MoveMemory(newBooleanData.ptr, (cast(void*)pData) + 8, 2); |
|---|
| 916 | 916 | booleanData = (newBooleanData[0] !is COM.VARIANT_FALSE); |
|---|
| 917 | 917 | break; |
|---|
| 918 | 918 | case COM.VT_I1 : |
|---|
| 919 | 919 | byte[1] newByteData; |
|---|
| 920 | | COM.MoveMemory(newByteData.ptr, pData + 8, 1); |
|---|
| | 920 | COM.MoveMemory(newByteData.ptr, (cast(void*)pData) + 8, 1); |
|---|
| 921 | 921 | byteData = newByteData[0]; |
|---|
| 922 | 922 | break; |
|---|
| 923 | 923 | case COM.VT_I2 : |
|---|
| 924 | 924 | short[1] newShortData; |
|---|
| 925 | | COM.MoveMemory(newShortData.ptr, pData + 8, 2); |
|---|
| | 925 | COM.MoveMemory(newShortData.ptr, (cast(void*)pData) + 8, 2); |
|---|
| 926 | 926 | shortData = newShortData[0]; |
|---|
| 927 | 927 | break; |
|---|
| 928 | 928 | case COM.VT_UI2 : |
|---|
| 929 | 929 | wchar[1] newCharData; |
|---|
| 930 | | COM.MoveMemory(newCharData.ptr, pData + 8, 2); |
|---|
| | 930 | COM.MoveMemory(newCharData.ptr, (cast(void*)pData) + 8, 2); |
|---|
| 931 | 931 | charData = newCharData[0]; |
|---|
| 932 | 932 | break; |
|---|
| 933 | 933 | case COM.VT_I4 : |
|---|
| 934 | 934 | int[1] newIntData; |
|---|
| 935 | | OS.MoveMemory(newIntData.ptr, pData + 8, 4); |
|---|
| | 935 | OS.MoveMemory(newIntData.ptr, (cast(void*)pData) + 8, 4); |
|---|
| 936 | 936 | intData = newIntData[0]; |
|---|
| 937 | 937 | break; |
|---|
| 938 | 938 | case COM.VT_I8 : |
|---|
| 939 | 939 | long[1] newLongData; |
|---|
| 940 | | OS.MoveMemory(newLongData.ptr, pData + 8, 8); |
|---|
| | 940 | OS.MoveMemory(newLongData.ptr, (cast(void*)pData) + 8, 8); |
|---|
| 941 | 941 | longData = newLongData[0]; |
|---|
| 942 | 942 | break; |
|---|
| 943 | 943 | case COM.VT_R4 : |
|---|
| 944 | 944 | float[1] newFloatData; |
|---|
| 945 | | COM.MoveMemory(newFloatData.ptr, pData + 8, 4); |
|---|
| | 945 | COM.MoveMemory(newFloatData.ptr, (cast(void*)pData) + 8, 4); |
|---|
| 946 | 946 | floatData = newFloatData[0]; |
|---|
| 947 | 947 | break; |
|---|
| 948 | 948 | case COM.VT_R8 : |
|---|
| 949 | 949 | double[1] newDoubleData; |
|---|
| 950 | | COM.MoveMemory(newDoubleData.ptr, pData + 8, 8); |
|---|
| | 950 | COM.MoveMemory(newDoubleData.ptr, (cast(void*)pData) + 8, 8); |
|---|
| 951 | 951 | doubleData = newDoubleData[0]; |
|---|
| 952 | 952 | break; |
|---|
| 953 | 953 | case COM.VT_DISPATCH : { |
|---|
| 954 | 954 | IDispatch[1] ppvObject; |
|---|
| 955 | | OS.MoveMemory(ppvObject.ptr, pData + 8, 4); |
|---|
| | 955 | OS.MoveMemory(ppvObject.ptr, (cast(void*)pData) + 8, 4); |
|---|
| 956 | 956 | if (ppvObject[0] is null) { |
|---|
| 957 | 957 | type = COM.VT_EMPTY; |
|---|
| … | … | |
| 964 | 964 | case COM.VT_UNKNOWN : { |
|---|
| 965 | 965 | IUnknown[1] ppvObject; |
|---|
| 966 | | OS.MoveMemory(ppvObject.ptr, pData + 8, 4); |
|---|
| | 966 | OS.MoveMemory(ppvObject.ptr, (cast(void*)pData) + 8, 4); |
|---|
| 967 | 967 | if (ppvObject[0] is null) { |
|---|
| 968 | 968 | type = COM.VT_EMPTY; |
|---|
| … | … | |
| 976 | 976 | // get the address of the memory in which the string resides |
|---|
| 977 | 977 | wchar*[1] hMem; |
|---|
| 978 | | OS.MoveMemory(hMem.ptr, pData + 8, 4); |
|---|
| | 978 | OS.MoveMemory(hMem.ptr, (cast(void*)pData) + 8, 4); |
|---|
| 979 | 979 | if (hMem[0] is null) { |
|---|
| 980 | 980 | type = COM.VT_EMPTY; |
|---|