Commit Graph

2456 Commits

Author SHA1 Message Date
Jacek Caban dedcd30cb8 ole32: Pass requested interface IID to CreateInstance in CoCreateInstanceEx.
Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2015-10-22 16:47:15 +09:00
Huw Davies cc1b2879e4 ole32: Set the release interface to NULL before calls to GetDataHere.
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2015-10-21 21:57:22 +09:00
Dmitry Timoshkov b9d8c2b1ea ole32: Initialize number of bytes read before the comparison.
Signed-off-by: Dmitry Timoshkov <dmitry@baikal.ru>
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2015-10-21 19:19:08 +09:00
Nikolay Sivov 4afda020ae ole32/tests: Use BOOL variables for BOOL return type (PVS-Studio).
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2015-10-21 00:25:34 +09:00
Dmitry Timoshkov f9bc636d35 ole32: PropVariantCopy should return DISP_E_BADVARTYPE in case of bad source variant type.
In some rare (notably for some VT_VECTOR) cases Windows implementation
returns STG_E_INVALIDPARAMETER, but returning DISP_E_BADVARTYPE should
cover most of cases.

Signed-off-by: Dmitry Timoshkov <dmitry@baikal.ru>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2015-10-21 00:25:33 +09:00
Huw Davies 5ae2b5ae93 ole32: Release interfaces as part of Stop.
This can now be done as Stop will no longer be called from within an object call.

Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2015-10-15 00:53:19 +09:00
Huw Davies 719c479a36 ole32: Defer calling Stop in an OnClose notification during an object call.
The OnClose notification may arrive during a call to the object.  Releasing the
object's interfaces at this point would be bad, so delay this until after the
object call returns.

Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2015-10-15 00:53:19 +09:00
Huw Davies 79598c4803 ole32: Call the cache's OnRun and OnStop methods.
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2015-10-15 00:53:18 +09:00
Huw Davies e4ec89f2b0 ole32: Return OLE_E_NOTRUNNING on a cache-miss when the object isn't running.
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2015-10-15 00:53:18 +09:00
Huw Davies 4fcc5fec57 ole32: Always use object_is_running to check whether the object is running.
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2015-10-14 20:36:55 +09:00
Huw Davies a56a0eb063 ole32: Rewrite _Run() to return early on failure.
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2015-10-14 20:36:43 +09:00
Huw Davies afbb4afc6c ole32: Silence an incorrect fixme.
The remote unknown object should not implement IExternalConnection.

Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2015-10-14 12:43:28 +09:00
Huw Davies 1dcf3f8e0a ole32/tests: Test calling CoDisconnectObject from within a COM call to the object.
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2015-10-14 12:43:21 +09:00
Huw Davies 327100fef9 ole32: Don't block inside CoDisconnectObject.
This may be called inside a COM call to the object.

Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2015-10-14 12:43:17 +09:00
Huw Davies 35571a7254 ole32: Hold a reference to the stub manager throughout an incoming call.
This will enable us to defer deleting the manager until the call has finished.

Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2015-10-14 12:43:13 +09:00
Huw Davies 09cd89c0cc ole32: Implement OleCreateFromFileEx.
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2015-10-09 19:17:08 +09:00
Huw Davies 94ee4096ec ole32: Add a stub for OleCreateFromFileEx.
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2015-10-09 19:17:02 +09:00
Huw Davies d340f09a33 ole32: Don't try to load a handler - the real server is needed.
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2015-10-09 19:16:51 +09:00
Huw Davies 577644f3c1 ole32: Test the result of IRunningObjectTable_GetObject against S_OK.
Typically it would return MK_E_UNAVAILABLE and not S_FALSE if the moniker
is not registered.

Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2015-10-09 19:16:43 +09:00
Jacek Caban 38a9a232f7 ole32: Use get_stub_manager_from_object in CoDisconnectObject. 2015-09-04 19:29:29 +09:00
Jacek Caban cb183688bb ole32: Catch crashes in stub object destructors when destroying stub manager. 2015-09-02 22:45:17 +09:00
Jacek Caban c784e34693 ole32: Quote executable name in CreateProcess call.
Fixes tests on VMs that have spaces in executable path.
2015-09-02 22:45:05 +09:00
Jacek Caban 0a92038b38 ole32: Added tests for IPSFactoryBuffer::CreateStub calls. 2015-08-29 14:28:23 +09:00
Jacek Caban 9bdb97e694 ole32: Use proper interface pointer in CreateStub call. 2015-08-29 14:28:23 +09:00
Jacek Caban e5edbc6fa0 ole32: Use proper IUnknown implementation when finding and creating stub manager. 2015-08-29 14:28:22 +09:00
Jacek Caban 60451f9855 ole32: Create interface stub only if it's not already created. 2015-08-29 14:28:22 +09:00
Francois Gouget 25870c1fba ole32: A cosmetic fix for the CoMarshalInterface() trace. 2015-08-29 14:27:39 +09:00
Andrey Gusev 5cdcd4493f Assorted spelling and typos fixes. 2015-08-18 15:00:13 +09:00
Francois Gouget f8a7d6ed74 Assorted spelling fixes. 2015-08-07 23:50:48 +09:00
Vincent Povirk 9d517a1727 ole32: Ignore high part of size in storage version 3 files. 2015-08-06 21:42:46 +09:00
Hans Leidekker 4062db444c ole32: Add stub implementations of CoGetActivationState and CoGetCallState. 2015-08-03 12:11:10 +02:00
Piotr Caban 9fd75e8650 ole32/tests: Fix new failures in CoWaitForMultipleHandles tests. 2015-07-31 12:07:41 +02:00
Piotr Caban fbf7046ae8 ole32: Don't pump all messages in CoWaitForMultipleHandles in threads without apartment window. 2015-07-30 23:50:43 +02:00
Dmitry Timoshkov 76f9d93344 ole32: Fix a memory leak. 2015-07-13 22:08:38 +09:00
Damjan Jovanovic 372b0e1e80 ole32: Convey the Alt button state to the drop target. 2015-07-07 16:52:21 +09:00
Vincent Povirk 9cf835a947 ole32: Use grfLocksSupported to decide when LockRegion is implemented. 2015-07-07 16:52:21 +09:00
Vincent Povirk 8ff3783586 ole32: Add a storage test using a custom ILockBytes. 2015-07-07 16:52:21 +09:00
Dmitry Timoshkov 1f17334fc2 ole32: Accept STG_E_UNIMPLEMENTEDFUNCTION when ILockBytes implementation doesn't support locking.
Some custom implementations return it instead of STG_E_INVALIDFUNCTION.
2015-07-06 16:34:47 +09:00
Nikolay Sivov 64456de761 ole32: Handle EnumElements() failure (Coverity). 2015-06-29 18:51:02 +09:00
Nikolay Sivov 1e97a2db17 ole32/tests: Fix source buffer leak (Valgrind). 2015-06-22 15:31:54 +09:00
Nikolay Sivov 4cef7ad841 ole32: Fix a typo in argument name. 2015-06-17 18:19:55 +09:00
Nikolay Sivov 61368e76e4 ole32: Marshal HBRUSH as remotable handle. 2015-06-16 16:50:35 +09:00
Nikolay Sivov 6d53f071c6 ole32: Marshal HICON as remotable handle. 2015-06-15 22:10:31 +09:00
Nikolay Sivov 815197f28c ole32: Marshal HDC as remotable handle. 2015-06-15 22:10:31 +09:00
Vincent Povirk 3f83b788d4 ole32: Fix storage locking for read-only exclusive mode. 2015-06-12 21:22:42 +09:00
Nikolay Sivov ff6201c61f ole32/tests: Test if user memory routines are called, remove some useless traces. 2015-06-05 18:38:21 +09:00
Nikolay Sivov bfa23b637e ole32: Fix length of buffer allocated by SNB_UserUnmarshal() (Valgrind). 2015-06-04 15:55:53 +09:00
Nikolay Sivov 7c5f639cb8 ole32: Initialize returned value for disconnected case too in proxy_manager_get_remunknown() (Coverity). 2015-06-01 14:52:56 +09:00
Nikolay Sivov 5c0e48e8ca ole32: Avoid potential null pointer access (Coverity). 2015-06-01 14:52:52 +09:00
Nikolay Sivov 10c878a451 ole32: Implemented some proxy/stubs methods. 2015-06-01 14:43:02 +09:00
Sebastian Lackner fdd83248b6 ole32/tests: Add additional tests for CoWaitForMultipleHandles and WM_QUIT. 2015-05-22 14:09:19 +09:00
Nikolay Sivov aa3a234803 ole32: Implement SNB marshalling. 2015-05-15 21:58:06 +09:00
Francois Gouget 5f35f1a8db ole32/tests: Silence some clipboard traces that generate too many lines. 2015-05-12 22:32:34 +09:00
Nikolay Sivov 26a9f62db7 ole32/tests: Added a test for OleRun(). 2015-05-08 18:33:35 +09:00
Francois Gouget 514345b401 ole32: Make some storage32 functions static. 2015-05-04 15:07:39 +09:00
Francois Gouget 356748e6bc ole32: Reorder storage32 functions to avoid forward declarations. 2015-05-04 15:07:35 +09:00
Francois Gouget 58e47c612f ole32: Fix some storage32 comments. 2015-05-04 15:06:53 +09:00
Nikolay Sivov bb37d75074 ole32/tests: Fix a test failure on Win8. 2015-05-01 21:12:42 +09:00
Nikolay Sivov 3d33d8a9c4 ole32/tests: Fix test failures on some VMs with limited user permissions. 2015-05-01 21:12:23 +09:00
Francois Gouget 7703852627 ole32; Fix some storage32 comments and standardize some virtual table names. 2015-04-27 15:08:46 +09:00
Huw Davies a38699084b ole32/tests: Win 8 releases the drop target in OleUninitialize(). 2015-04-20 14:37:13 +09:00
Nikolay Sivov 961b1a270f ole32: Remove a couple of interface casts. 2015-04-06 12:09:17 +09:00
Huw Davies f57e08995a ole32/tests: Add tests for loading a dib 'CONTENTS' stream. 2015-03-25 19:46:03 +09:00
Huw Davies b0deb315a0 ole32: Implement QueryGetData(). 2015-03-25 19:45:58 +09:00
Huw Davies b4cd2c4dbb ole32: Add support for drawing the dib format. 2015-03-25 19:45:55 +09:00
Huw Davies e410f273cd ole32: Add support for retrieving extents of dib format. 2015-03-25 19:45:52 +09:00
Huw Davies bbba2c00aa ole32: Add support for loading dibs. 2015-03-25 19:45:48 +09:00
Huw Davies 547fd746bb ole32: Separate metafile loading into a helper function. 2015-03-25 19:45:42 +09:00
Huw Davies 480c10cce9 ole32: Add support for parsing the 'CONTENTS' stream. 2015-03-25 19:45:36 +09:00
Huw Davies d864387aaa ole32: Split the data loading into a couple of helpers. 2015-03-25 19:45:31 +09:00
Huw Davies a4e3668f3f ole32: A cache entry should hold the stream its data is from, not the top-level storage. 2015-03-25 19:45:10 +09:00
Huw Davies c5e020c5b5 ole32: Read the class id from the top-level storage object.
The cache_entries' storages are just references to the same object anyway.
2015-03-25 19:44:59 +09:00
Nikolay Sivov 597515c074 ole32/tests: Return interface pointer instead of impl pointer from QI. 2015-03-24 18:16:34 +09:00
Nikolay Sivov 7d44fa714a ole32: Return interface pointers instead of impl pointers from QI. 2015-03-24 18:16:30 +09:00
Nikolay Sivov bc9b29f65d ole32: Cleanup QI for IEnumMoniker. 2015-03-20 16:23:12 +09:00
Nikolay Sivov 853dc5ec2f ole32: Improve error handling in GetClassFile() (PVS-Studio). 2015-03-20 16:23:10 +09:00
Nikolay Sivov f294ea8333 ole32: Fix error handling in GetTimeOfLastChange() for item moniker (PVS-Studio). 2015-03-20 16:23:08 +09:00
Francois Gouget f505e6fb4a Assorted spelling fixes. 2015-03-19 21:54:14 +09:00
Nikolay Sivov 3376648224 ole32/datacache: Handle stream Stat() failure (PVS-Studio). 2015-03-19 16:56:05 +09:00
Nikolay Sivov 1c2bbe8f65 ole32: Handle ILockBytes creation failure (PVS-Studio). 2015-03-17 14:19:12 +09:00
Francois Gouget 7fe0600237 ole32: Remove unneeded NONAMELESSXXX directives. 2015-03-17 14:18:54 +09:00
Nikolay Sivov 0e24c33332 ole32: Handle Stat() failure in OleLoad() (PVS-Studio). 2015-03-13 22:28:31 +09:00
Nikolay Sivov 24dce2b229 ole32: Handle some failures in Inverse() for composite moniker (PVS-Studio). 2015-03-13 22:28:31 +09:00
Nikolay Sivov 46914d8794 ole32: Check ComposeWith() return value too (PVS-Studio). 2015-03-13 22:28:31 +09:00
Sebastian Lackner 66e8060204 ole32: Wait a bit before doing next sanity check in StorageImpl_LockRegionSync. 2015-03-13 00:28:21 +09:00
Alexandre Julliard c6c3ccad36 ole32: Remove confusing uses of the __thiscall specifier. 2015-03-12 14:20:33 +09:00
Sebastian Lackner 59a1bcd96a ole32: Fix call to free_stringtable with uninitialized pointer (Coverity). 2015-03-11 12:47:40 +09:00
Sebastian Lackner 83aca6e7aa ole32: Fix a possible handle leak (Coverity). 2015-03-11 12:46:54 +09:00
Vincent Povirk 0b7c05389b ole32: Fail to open storage files that are locked incorrectly. 2015-03-11 12:45:52 +09:00
Vincent Povirk eead04803f ole32: Add a 20 second timeout when attempting to grab locks. 2015-03-11 12:45:49 +09:00
Vincent Povirk 1645f7b9e3 ole32: Accept only STG_E_INVALIDFUNCTION or success from LockRegionSync. 2015-03-11 12:45:42 +09:00
Vincent Povirk c8791edbdf ole32: Don't use real synchronous locks for storage synchronization. 2015-03-11 12:45:38 +09:00
Vincent Povirk 06b735ae76 ole32: Test the entire range lock block for synchronization. 2015-03-11 12:45:33 +09:00
Nikolay Sivov 44360823b9 oleaut32: Use WdtpInterfacePointer_* functions in VARIANT marshalling. 2015-03-09 22:06:21 +09:00
Francois Gouget fb908b3a95 ole32: Don't define NONAMELESSUNION in olestd.h. It's not needed anyway. 2015-03-06 12:53:55 +09:00
Sebastian Lackner c23db594aa ole32: Fix an invalid usage of InterlockedCompareExchange. 2015-03-03 17:13:46 +09:00
André Hentschel 8af03fef9a ole32: Remove unused macros. 2015-02-23 15:25:56 +09:00
Michael Stefaniuc 73019d5e20 ole32: Remove an always true conditional subexpression (PVS-Studio). 2015-02-18 16:09:13 +09:00
Michael Stefaniuc 514951cc11 ole32: Return the buffer pointer when WdtpInterfacePointer_UserMarshal fails.
Found by PVS-Studio.
2015-01-19 14:20:50 +01:00
Michael Stefaniuc 139ebf643a ole32/tests: Remove unused assignments (PVS-Studio). 2015-01-19 14:20:36 +01:00
Michael Stefaniuc c2da97a5e5 ole32/tests: Actually test some return codes (PVS-Studio). 2015-01-19 14:20:32 +01:00
Qian Hong a940718a4d ole32: Make CoUninitialize and OleUninitialize hotpatchable. 2015-01-16 16:52:25 +01:00
Piotr Caban 95c57c618a ole32: Only change DoDragDrop return value on IDropTarget::Drop failure. 2015-01-15 14:06:24 +01:00
Nikolay Sivov 73419dc484 ole32: Return END_OF_CHAIN for chains starting with special sector values. 2014-12-29 22:20:29 +01:00
André Hentschel 065e4770f0 ole32/tests: Remove unused variable (Clang). 2014-12-02 10:48:37 +01:00
André Hentschel ec8602a812 ole32: Remove unused string (Clang). 2014-12-02 10:31:21 +01:00
Sebastian Lackner f6f55058e4 ole32: Don't process window events when APC calls are queued. 2014-11-21 20:10:04 +09:00
Sebastian Lackner bbf6891030 ole32: Verify arguments for CoWaitForMultipleHandles, always initialize index to zero. 2014-11-21 20:10:01 +09:00
Sebastian Lackner f7f2167fe8 ole32/tests: Add tests for CoWaitForMultipleHandles. 2014-11-21 20:09:58 +09:00
Nikolay Sivov 2487afa5d3 ole32/tests: Use proper wrappers for IObjContext methods. 2014-11-19 23:36:34 +09:00
Nikolay Sivov f7fdaf1c9f ole32/tests: Release() doesn't return HRESULT code. 2014-11-19 23:36:34 +09:00
Bruno Jesus 959ca6ac02 ole32: Avoid a possible null dereference. 2014-11-14 14:15:14 +09:00
Vincent Povirk bab4c36d47 ole32: Add support for pasting CF_BITMAP. 2014-11-14 14:13:01 +09:00
Akihiro Sagawa efdaa4a17a ole32: Search 32-bit registry in 64-bit CoGetPSClsid and vice versa. 2014-07-15 15:34:40 +02:00
Akihiro Sagawa 414398c1e7 ole32: Add KEY_WOW64 support in wrapper registry functions. 2014-07-15 15:33:59 +02:00
Akihiro Sagawa fae8d9db5f ole32/tests: Add CoGetPSClsid WOW64 registry tests. 2014-07-15 15:33:25 +02:00
Piotr Caban cdf2c5f2cb ole32: Don't do any message processing when we're already done with dragdrop operation. 2014-07-03 18:17:40 +02:00
Vincent Povirk 69ff6f74b2 ole32: Simplify the FileMonikerImpl_BindToStorage code. 2014-07-01 12:52:43 +02:00
Frédéric Delanoy 2ab8729020 Assorted spelling/grammar fixes. 2014-06-20 12:19:31 +02:00
Francois Gouget 082d091029 ole32: Return the correct error in FileLockBytesImpl_*LockRegion*(). 2014-06-18 19:55:45 +02:00
Francois Gouget bea2c6f2d5 ole32: Treat STG_E_LOCKVIOLATION the same way as STG_E_ACCESSDENIED as both indicate locking contention. 2014-06-18 19:55:40 +02:00
Francois Gouget cc4ad353d7 ole32: FileLockBytesImpl_WriteAt() should return STG_E_WRITEFAULT for write errors. 2014-06-18 19:55:29 +02:00
Francois Gouget 809b6aeab2 ole32: Fix StorageImpl_LockRegionSync() to actually wait between locking attempts. 2014-06-17 10:37:52 +02:00
Vincent Povirk a270ed90ad ole32: Add tests for STGC_OVERWRITE. 2014-06-16 09:28:45 +02:00
Andrew Eikum c2089cbd0d ole32: Respect TreatAs in CoCreateInstance. 2014-06-16 09:28:38 +02:00
Andrew Eikum 42f5118570 ole32: Implement CoTreatAsClass for classes without AutoTreatAs. 2014-06-16 09:28:29 +02:00
Andrew Eikum e9533ca85a ole32: Fix return type. 2014-06-13 16:22:28 +02:00
Andrew Eikum f02c0ae656 ole32: Fix return value logging. 2014-06-13 16:22:20 +02:00
Guillaume Charifi 216b24527d ole32: CoCreateGuid returns E_INVALIDARG on null-GUID. 2014-06-12 18:23:33 +02:00
Vincent Povirk 8107955273 ole32: Support storage files larger than 4 GB. 2014-06-12 13:19:04 +02:00
Vincent Povirk d32abd7726 ole32: Don't store file size in FileLockBytesImpl. 2014-06-11 13:06:00 +02:00
Vincent Povirk d89d43648f ole32: Invalidate all caches when the transaction sig changes. 2014-05-21 10:19:57 +02:00
Vincent Povirk 77e3de5828 ole32: Use a snapshot file when sharing storages for writing. 2014-05-21 10:19:51 +02:00
Vincent Povirk b3e26be0cb ole32: STGM_NOSNAPSHOT implies deny write. 2014-05-12 10:48:14 +02:00
Vincent Povirk cf75c5368b ole32: Use real blocking operations for storage locking when possible. 2014-05-09 14:16:12 +02:00
Vincent Povirk 45dd716e4e ole32: Warn in cases where we might corrupt storage files. 2014-05-09 14:16:08 +02:00
Vincent Povirk 4f0d36d9a0 ole32: Initial implementation of transaction locking. 2014-05-05 10:53:41 +02:00
Vincent Povirk b4ade51a84 ole32: Accept STGM_TRANSACTED with no share mode specified. 2014-05-05 10:53:38 +02:00
Vincent Povirk 6417a277cf ole32: Map STGM_SHARE_EXCLUSIVE to FILE_SHARE_READ. 2014-05-05 10:53:35 +02:00
Vincent Povirk 04735d6f39 ole32: Use share modes when creating storage files. 2014-05-05 10:53:30 +02:00
Vincent Povirk a60d41d70a ole32: Use symbolic names for range lock offsets. 2014-05-05 10:53:27 +02:00
Francois Gouget 3d70f86fe2 ole32/tests: Add a trailing '\n' to an ok() call. 2014-05-02 17:15:24 +02:00
Huw Davies dcfd901c83 ole32/tests: Fix win8 test failures. 2014-05-01 16:32:09 +02:00
Frédéric Delanoy 2e5cb7aac8 Assorted spelling/grammar fixes. 2014-04-30 18:34:20 +02:00
Vincent Povirk 65887802c5 ole32: Initial storage file locking implementation. 2014-04-29 11:26:51 +02:00
Vincent Povirk e6c58c74ad ole32: Reserve the range lock sector. 2014-04-29 11:26:47 +02:00
Vincent Povirk a00f43d7e0 ole32/tests: Add tests for sharing storages in transacted mode. 2014-04-29 11:26:33 +02:00
Vincent Povirk b8c60aaeec ole32/tests: Add tests for storage locking. 2014-04-29 11:25:55 +02:00
Dmitry Timoshkov 5356c945cd ole32: Add support for VT_DISPATCH/VT_UNKNOWN to PropVariantClear and PropVariantCopy. 2014-04-21 11:09:53 +02:00
Dmitry Timoshkov f9c40c37cd ole32: If number of VT_VECTOR elements is 0 there is no need to allocate memory. 2014-04-18 13:09:19 +02:00