]> git.saurik.com Git - wxWidgets.git/blob - src/msw/ole/safearray.cpp
Define CLSID_DragDropHelper ourselves to fix VC6 build.
[wxWidgets.git] / src / msw / ole / safearray.cpp
1 ///////////////////////////////////////////////////////////////////////////////
2 // Name: msw/ole/safearray.cpp
3 // Purpose: Implementation of wxSafeArrayBase class.
4 // Author: PB
5 // Created: 2012-09-23
6 // RCS-ID: $Id$
7 // Copyright: (c) 2012 wxWidgets development team
8 // Licence: wxWindows licence
9 ///////////////////////////////////////////////////////////////////////////////
10
11 // ============================================================================
12 // declarations
13 // ============================================================================
14
15 // ----------------------------------------------------------------------------
16 // headers
17 // ----------------------------------------------------------------------------
18
19 // for compilers that support precompilation, includes "wx.h".
20 #include "wx/wxprec.h"
21
22 #ifdef __BORLANDC__
23 #pragma hdrstop
24 #endif
25
26 #ifndef WX_PRECOMP
27 #include "wx/variant.h"
28 #endif // WX_PRECOMP
29
30 #include "wx/msw/ole/safearray.h"
31
32 // ============================================================================
33 // implementation
34 // ============================================================================
35
36 // ----------------------------------------------------------------------------
37 // wxSafeArrayBase
38 // ----------------------------------------------------------------------------
39
40 void wxSafeArrayBase::Destroy()
41 {
42 if ( m_array )
43 {
44 Unlock();
45 HRESULT hr = SafeArrayDestroy(m_array);
46 if ( FAILED(hr) )
47 {
48 wxLogApiError(wxS("SafeArrayDestroy()"), hr);
49 }
50 m_array = NULL;
51 }
52 }
53
54 SAFEARRAY* wxSafeArrayBase::Detach()
55 {
56 wxCHECK_MSG( m_array, NULL, wxS("Uninitialized safe array") );
57
58 Unlock();
59 SAFEARRAY* array = m_array;
60 m_array = NULL;
61 return array;
62 }
63
64 size_t wxSafeArrayBase::GetDim() const
65 {
66 wxASSERT( m_array );
67
68 return SafeArrayGetDim(m_array);
69 }
70
71 bool wxSafeArrayBase::GetLBound(size_t dim, long& bound) const
72 {
73 wxCHECK_MSG( m_array, false, wxS("Uninitialized safe array") );
74 wxCHECK_MSG( dim > 0, false, wxS("Invalid dimension index") );
75
76 HRESULT hr = SafeArrayGetLBound(m_array, dim, &bound);
77 if ( FAILED(hr) )
78 {
79 wxLogApiError(wxS("SafeArrayGetLBound()"), hr);
80 return false;
81 }
82 return true;
83 }
84
85 bool wxSafeArrayBase::GetUBound(size_t dim, long& bound) const
86 {
87 wxCHECK_MSG( m_array, false, wxS("Uninitialized safe array") );
88 wxCHECK_MSG( dim > 0, false, wxS("Invalid dimension index") );
89
90 HRESULT hr = SafeArrayGetUBound(m_array, dim, &bound);
91 if ( FAILED(hr) )
92 {
93 wxLogApiError(wxS("SafeArrayGetUBound()"), hr);
94 return false;
95 }
96 return true;
97 }
98
99 size_t wxSafeArrayBase::GetCount(size_t dim) const
100 {
101 long lBound, uBound;
102
103 if ( GetLBound(dim, lBound) && GetUBound(dim, uBound) )
104 return uBound - lBound + 1;
105 return 0;
106 }
107
108 bool wxSafeArrayBase::Lock()
109 {
110 wxCHECK_MSG( m_array, false, wxS("Uninitialized safe array") );
111
112 HRESULT hr = SafeArrayLock(m_array);
113 if ( FAILED(hr) )
114 {
115 wxLogApiError(wxS("SafeArrayLock()"), hr);
116 return false;
117 }
118 return true;
119 }
120
121 bool wxSafeArrayBase::Unlock()
122 {
123 wxCHECK_MSG( m_array, false, wxS("Uninitialized safe array") );
124
125 HRESULT hr = SafeArrayUnlock(m_array);
126 if ( FAILED(hr) )
127 {
128 wxLogApiError(wxS("SafeArrayUnlock()"), hr);
129 return false;
130 }
131 return true;
132 }
133
134