Variant.h

C:\home\SVGCats_src\src\Variant.h

[目次 | マクロ]

目次

マクロ一覧


   1|/**************************************************************************
   2|   1. <<< Variant 型 >>> 
   3|***************************************************************************/
   4|
   5|#ifndef __VARIANT_H
   6|#define __VARIANT_H
   7|
   8|#ifndef USES_PRIORITY_HEADER
   9|/*[START_OF_PRIORITY_HEADER]*/
  10|
  11|#ifndef  USES_VARIANT
  12|#define  USES_VARIANT
  13|
  14|#include  <KS.H>
  15|#include  <OLEAUTO.H>
  16|//#include  <atlconv.h>
  17|
  18|#endif
  19|
  20|/*[END_OF_PRIORITY_HEADER]*/
  21|#endif
  22|
  23|
  24| 
  25|/*---------------------------------------------------------------------*/
  26|/* 2. <<< Interface Area --------------------------------------------->>> */ 
  27|/*---------------------------------------------------------------------*/
  28|
  29|#ifdef  __cplusplus
  30|  extern "C" {
  31|#endif
  32|
  33| 
  34|/***********************************************************************
  35|  3. <<< [VARIANT] OLE 変数 >>> 
  36|
  37|・Variant, Bool, BSTR, SAFEARRAY
  38|・E:\Program Files\Microsoft Visual Studio\VC98\Include\OAIDL.H
  39|  型情報: VARIANT(例:variant.parray)
  40|・E:\Program Files\Microsoft Visual Studio\VC98\Include\KS.H
  41|  型識別子: VARENUM
  42|・E:\Program Files\Microsoft Visual Studio\VC98\Include\OLEAUTO.H
  43|  操作情報: BSTR, Time, SafeArray, VARIANT, Vector, VARTYPE Coercion,
  44|  VARTYPE Math, Format, MISC, V_ISARRAY
  45|・E:\Program Files\Microsoft Visual Studio\VC98\Include\WinERROR.H
  46|  エラーコード
  47|・型IDの例: long=VT_I4
  48|
  49|
  50|4. <<< I で始まる COM インターフェイスの使い方 >>>
  51|
  52|  IInkOverlay*  m_InkOverlay;
  53|
  54|  CoInitialize( NULL );  // COM インターフェイス全般の初期化
  55|  hr = CoCreateInstance( CLSID_InkOverlay, NULL, CLSCTX_INPROC_SERVER,
  56|                         IID_IInkOverlay, (void*)&m_InkOverlay );
  57|  if ( hr != 0 )  error();
  58|
  59|型, CLSID, IID は、SDKのヘッダファイルにあります。 CLSCTX は、そのままで構いません。
  60|
  61|  hr = m_InkOverlay->put_hWnd( m_hWnd );   // インターフェイスが持っているメンバ関数
  62|  if ( hr != 0 )  error();
  63|  m_InkOverlay->Release();   // 開放して終了
  64|  CoUninitialize();  // COM インターフェイス全般の後始末
  65|
  66|エラーコードは以下のヘッダ、または SDKに添付のヘッダを参照。
  67|E:\Program Files\Microsoft Visual Studio\VC98\Include\WinERROR.h
  68|************************************************************************/
  69|
  70| 
  71|/***********************************************************************
  72|  5. <<< [Variant] VARIANT 任意型 >>> 
  73|************************************************************************/
  74|void  Variant_initEmpty( VARIANT* );
  75|void  Variant_finish( VARIANT* );
  76|
  77|
  78| 
  79|/***********************************************************************
  80|  6. <<< [Bool] 論理型、VT_BOOL >>> 
  81|【補足】
  82|・値は、VARIANT_TRUE, VARIANT_FALSE です。
  83|  E:\Program Files\Microsoft Visual Studio\VC98\Include\WTYPES.H
  84|************************************************************************/
  85|/* void Variant_setBool( VARIANT*, bool ); */
  86|
  87|#ifdef  VARIANT_USES_OLD_030329
  88|#define  Variant_Bool_True   ((VARIANT_BOOL)-1)
  89|#define  Variant_Bool_False  ((VARIANT_BOOL)0)
  90|#endif
  91|
  92| 
  93|/***********************************************************************
  94|  7. <<< [BSTR] 文字列型 >>> 
  95|************************************************************************/
  96|/* BSTR  s;  */
  97|/* s = SysAllocString( OLESTR("abc") ); */
  98|/* SysFreeString( s ); */
  99|
 100|void  Variant_initBSTR( VARIANT* m, const unsigned short* value );
 101|BSTR  Variant_refBSTR( VARIANT* m );
 102|char* Variant_refWCharP( VARIANT* m );
 103|int   Variant_getStrlen( VARIANT* m );
 104|void  Variant_setStrlen( VARIANT* m, int mWChar );
 105|void  Variant_strcat( VARIANT* dst, VARIANT* plus );
 106|
 107| 
 108|/***********************************************************************
 109|  8. <<< [SAFEARRAY] 配列型、VT_ARRAY, VT_VECTOR >>> 
 110|************************************************************************/
 111|void  Variant_initArray( VARIANT* m, int typeID, int iStart, int iEnd );
 112|SAFEARRAY*  Variant_refSAFEARRAY( VARIANT* m );
 113|
 114|/* type*  Variant_startAccess( VARIANT* m, type ); */
 115|void  Variant_endAccess( VARIANT* m );
 116|
 117|
 118|
 119|/* 以下は内部用です */
 120|void*  Variant_startAccess_imp( VARIANT* m );
 121|
 122|
 123| 
 124|/*---------------------------------------------------------------------*/
 125|/* 9. <<< Mapping Area ----------------------------------------------->>> */ 
 126|/*---------------------------------------------------------------------*/
 127|
 128|
 129| 
 130|/***********************************************************************
 131|  10. <<< [Variant_initEmpty] 空で初期化する >>> 
 132|【引数】
 133|  ・VARIANT*  m;  Variant型
 134|************************************************************************/
 135|#define  Variant_initEmpty( m ) \
 136|  VariantInit( m )
 137|
 138|
 139| 
 140|/***********************************************************************
 141|  11. <<< [Variant_finish] 後始末する >>> 
 142|【引数】
 143|  ・VARIANT*  m;  Variant型
 144|************************************************************************/
 145|#define  Variant_finish( m ) \
 146|  VariantClear( m )
 147|
 148|
 149| 
 150|/***********************************************************************
 151|  12. <<< [Variant_initBool] 論理値を代入する >>> 
 152|【引数】
 153|  ・VARIANT*  m;  Variant型
 154|  ・bool  value;  代入する値
 155|************************************************************************/
 156|#define  Variant_initBool( var, value ) \
 157|  ( VariantInit( var ), \
 158|    V_VT( var ) = VT_BOOL, \
 159|    V_BOOL( var ) =  ( value ? Variant_Bool_True : Variant_Bool_False ) )
 160|
 161|
 162| 
 163|/***********************************************************************
 164|  13. <<< [Variant_initBSTR] BSTR 型変数に代入する >>> 
 165|【引数】
 166|  ・VARIANT*  m;    Variant型
 167|  ・const unsigned short*  value;   文字列値(UNICODE)
 168|************************************************************************/
 169|#define  Variant_initBSTR( m, value ) \
 170|  ( VariantInit( m ), \
 171|   (m)->vt = VT_BSTR, \
 172|   Variant_refBSTR( m ) = SysAllocString( value ) )
 173| 
 174|/***********************************************************************
 175|  14. <<< [Variant_refBSTR] BSTR を参照する >>> 
 176|【引数】
 177|  ・VARIANT*  m;   Variant型
 178|  ・BSTR  返り値;  BSTR の参照
 179|************************************************************************/
 180|#define  Variant_refBSTR( m ) \
 181|  ( (m)->bstrVal )
 182| 
 183|/***********************************************************************
 184|  15. <<< [Variant_refWCharP] WCHAR* で参照する >>> 
 185|【引数】
 186|  ・VARIANT*  m;   Variant型
 187|  ・const unsigned short*  返り値;   先頭アドレス(UNICODE)
 188|************************************************************************/
 189|#define  Variant_refWCharP( m ) \
 190|  ((const unsigned short*) (m)->bstrVal )
 191|
 192| 
 193|/***********************************************************************
 194|  16. <<< [Variant_getStrlen] 文字の長さを返す >>> 
 195|【引数】
 196|  ・VARIANT*  m;   Variant型
 197|  ・int  返り値;   文字の長さ(L'\0'を含まない)、UNICODE なのでバイト数の半分
 198|************************************************************************/
 199|#define  Variant_getStrlen( m ) \
 200|  ( (m)->vt == VT_BSTR ? SysStringLen( (m)->bstrVal ) : 0 )
 201|
 202| 
 203|/***********************************************************************
 204|  17. <<< [Variant_setStrlen] 文字列の長さを修正する >>> 
 205|【引数】
 206|  ・VARIANT*  m;   Variant型
 207|  ・int  mWChar;   文字数(バイト数の半分マイナス1)
 208|************************************************************************/
 209|#define  Variant_setStrlen( m, mWChar ) \
 210|    SysReAllocStringLen( Variant_refBSTR(m), NULL, mWChar )
 211| 
 212|/***********************************************************************
 213|  18. <<< [Variant_strcat] 文字列を連結する >>> 
 214|【引数】
 215|  ・VARIANT*  m;     Variant型
 216|  ・VARIANT*  plus;  追加する文字列の Variant
 217|************************************************************************/
 218|#define  Variant_strcat( dst, plus ) \
 219|  VarBstrCat( Variant_refBSTR(dst), Variant_refBSTR(plus), \
 220|    &Variant_refBSTR(dst) )
 221| 
 222|/***********************************************************************
 223|  19. <<< [Variant_initArray] 配列を確保する >>> 
 224|【引数】
 225|  ・VARIANT*  m;  Variant型
 226|  ・int  typeID;  型ID、VT_I4 など
 227|  ・int  iStart;  配列番号の最小値(通常1)
 228|  ・int  iEnd;    配列の要素数(→補足)
 229|************************************************************************/
 230|#define  Variant_initArray( m, typeID, iStart, n ) \
 231|  ( VariantInit( m ), \
 232|   (m)->vt = VT_ARRAY | (typeID), \
 233|   (m)->parray = SafeArrayCreateVector( typeID, iStart, n ), \
 234|   (m)->parray == NULL ? error() : 0 )
 235|
 236|
 237| 
 238|/***********************************************************************
 239|  20. <<< [Variant_refSAFEARRAY] SAFEARRAY* 型を参照する >>> 
 240|************************************************************************/
 241|#define  Variant_refSAFEARRAY( m ) \
 242|  ((m)->parray)
 243|
 244|
 245| 
 246|/***********************************************************************
 247|  21. <<< [Variant_startAccess] ポインタを使ってアクセスできるようにする >>> 
 248|【引数】
 249|  ・VARIANT*  m;    Variant型
 250|  ・type;           配列の型(int など)
 251|  ・type*  返り値;  配列の先頭アドレス
 252|【補足】
 253|・アクセスが終了したら、Variant_endAccess を呼び出してください。
 254|************************************************************************/
 255|#define  Variant_startAccess( m, type ) \
 256|  ((type*)Variant_startAccess_imp( m ))
 257|
 258|
 259| 
 260|/***********************************************************************
 261|  22. <<< [Variant_endAccess] ポインタを使ったアクセスを終了する >>> 
 262|【引数】
 263|  ・VARIANT*  m;    Variant型
 264|【補足】
 265|・参照:Variant_startAccess
 266|************************************************************************/
 267|#define  Variant_endAccess( m ) \
 268|  ( SUCCEEDED( SafeArrayUnaccessData( (m)->parray ) ) ? 0 : error() )
 269|
 270|
 271|
 272| 
 273|#ifdef  __cplusplus 
 274|  }  /* extern "C" */
 275|#endif
 276|
 277|#endif
 278| 
 279|