]> git.saurik.com Git - wxWidgets.git/blame_incremental - src/msw/ole/safearray.cpp
Compilation fix for wxDocManager after r73004.
[wxWidgets.git] / src / msw / ole / safearray.cpp
... / ...
CommitLineData
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
40void 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
54SAFEARRAY* 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
64size_t wxSafeArrayBase::GetDim() const
65{
66 wxASSERT( m_array );
67
68 return SafeArrayGetDim(m_array);
69}
70
71bool 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
85bool 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
99size_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
108bool 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
121bool 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