ISIS Logo
lvDCOM
An EPICS support module to export LabVIEW values as process variables
variant_utils.h
Go to the documentation of this file.
1 /*************************************************************************\
2 * Copyright (c) 2013 Science and Technology Facilities Council (STFC), GB.
3 * All rights reverved.
4 * This file is distributed subject to a Software License Agreement found
5 * in the file LICENSE.txt that is included with this distribution.
6 \*************************************************************************/
7 
10 
11 #ifndef VARIANT_UTILS_H
12 #define VARIANT_UTILS_H
13 
15 class COMexception : public std::runtime_error
16 {
17 public:
18  explicit COMexception(const std::string& what_arg) : std::runtime_error(what_arg) { }
19  explicit COMexception(const std::string& message, HRESULT hr) : std::runtime_error(com_message(message, hr)) { }
20 private:
21  static std::string com_message(const std::string& message, HRESULT hr);
22 };
23 
27 class Win32StructuredException : public std::runtime_error
28 {
29 public:
30  explicit Win32StructuredException(const std::string& message) : std::runtime_error(message) { }
31  explicit Win32StructuredException(unsigned int code, EXCEPTION_POINTERS *pExp) : std::runtime_error(win32_message(code, pExp)) { }
32 private:
33  static std::string win32_message(unsigned int code, EXCEPTION_POINTERS * pExp);
34 };
35 
36 int allocateArrayVariant(VARIANT* v, VARTYPE v_type, int* dims_array, int ndims);
37 
38 int accessArrayVariant(VARIANT* v, float** values);
39 int accessArrayVariant(VARIANT* v, double** values);
40 int accessArrayVariant(VARIANT* v, long** values);
41 int accessArrayVariant(VARIANT* v, VARIANT** values);
42 int accessArrayVariant(VARIANT* v, BSTR** values);
43 
44 int unaccessArrayVariant(VARIANT* v);
45 
46 int arrayVariantLength(VARIANT* v);
47 int arrayVariantDimensions(VARIANT* v, int dims_array[], int& ndims);
48 
49 template <typename T>
50 int makeVariantFromArray(VARIANT* v, const T* the_array, int n);
51 
52 template <typename T>
53 int makeVariantFromArray(VARIANT* v, const std::vector<T>& the_array);
54 
55 #endif /* VARIANT_UTILS_H */
create an C++ exception from a COM HRESULT.
Definition: variant_utils.h:15
int arrayVariantDimensions(VARIANT *v, int dims_array[], int &ndims)
An STL exception describing a Win32 Structured Exception.
Definition: variant_utils.h:27
int unaccessArrayVariant(VARIANT *v)
COMexception(const std::string &what_arg)
Definition: variant_utils.h:18
Win32StructuredException(unsigned int code, EXCEPTION_POINTERS *pExp)
Definition: variant_utils.h:31
int allocateArrayVariant(VARIANT *v, VARTYPE v_type, int *dims_array, int ndims)
COMexception(const std::string &message, HRESULT hr)
Definition: variant_utils.h:19
Win32StructuredException(const std::string &message)
Definition: variant_utils.h:30
static int accessArrayVariant(VARIANT *v, void **values, VARTYPE vt)
int makeVariantFromArray(VARIANT *v, const std::vector< T > &the_array)
static std::string win32_message(unsigned int code, EXCEPTION_POINTERS *pExp)
int arrayVariantLength(VARIANT *v)
static std::string com_message(const std::string &message, HRESULT hr)
Copyright © 2013 Science and Technology Facilities Council | Generated by   doxygen 1.8.5