OSDN Git Service

CLSIDの変更
[seraphyscrtools/SeraphyScriptTools.git] / generic.cpp
1 #include "stdafx.h"
2 #include "SeraphyScriptTools.h"
3 #include "generic.h"
4
5 SAFEARRAY* GetArrayFromVariant(VARIANT& var, VARTYPE* pVt)
6 {
7         // \8c^\82Ì\8f\89\8aú\89»
8         if (pVt) {
9                 *pVt = VT_ERROR;
10         }
11         VARIANT* pParseVariant = &var;
12         SAFEARRAY* pArray = NULL;
13         if (!(var.vt & VT_ARRAY) && (var.vt & (VT_BYREF | VT_VARIANT))) {
14                 // \94z\97ñ\82Å\82Í\82È\82­\82Ä\81A\83o\83\8a\83A\83\93\83g\82Ì\8eQ\8fÆ\93n\82µ\82Å\82 \82ê\82Î\81A\82»\82Ì\83|\83C\83\93\83^\82É\89ð\90Í\82ð\82 \82í\82¹\82é
15                 pParseVariant = var.pvarVal;
16         }
17         if (!(pParseVariant->vt & VT_ARRAY)) {
18                 // \94z\97ñ\88È\8aO\82È\82ç\8fI\97¹
19                 return NULL;
20         }
21         // \94z\97ñ\82Å\82 \82é
22         if (pParseVariant->vt & VT_BYREF) {
23                 // \94z\97ñ\82Ì\8eQ\8fÆ\93n\82µ\82Å\82 \82é
24                 pArray = *pParseVariant->pparray;
25         }
26         else {
27                 // \94z\97ñ\82»\82Ì\82à\82Ì\82Å\82 \82é
28                 pArray = pParseVariant->parray;
29         }
30         // \8c^\8fî\95ñ\82Ì\8eæ\82è\8fo\82µ (SafeArray\82É\82Í\8c^\8fî\95ñ\82Í\95K\90{\82Å\82Í\82È\82¢\82½\82ß)
31         if (pVt) {
32                 *pVt = (pParseVariant->vt & VT_TYPEMASK);
33         }
34         return pArray;
35 }
36
37 /**
38  * VARIANT\8c^\82ª\95Ï\90\94(ByRef\8c^)\82ð\82³\82µ\82Ä\82¢\82é\8fê\8d\87\82Í\81A
39  * \82»\82ê\8e©\90g\82ª\92l\82Æ\82È\82é\82æ\82¤\82ÉByVal\8c^\82É\8b­\90§\95Ï\8a·\82µ\82Ä\83R\83s\81[\82·\82é.
40  * (ByVal\82Å\82 \82ê\82Î\92P\8f\83\82É\83R\83s\81[\82·\82é.)
41  */
42 HRESULT VariantCopyByVal(VARIANT *pDestVal, const VARIANT *pSrcVal)
43 {
44         if (!pDestVal || !pSrcVal) {
45                 return E_POINTER;
46         }
47         ATLASSERT(pDestVal != pSrcVal);
48
49         VariantInit(pDestVal);
50
51         if (pSrcVal->vt & VT_BYREF) {
52                 // ByRef\82Ì\8fê\8d\87\82ÍByVal\82É\95Ï\8a·\82·\82é.
53                 VARTYPE vt = pSrcVal->vt & ~VT_BYREF;
54
55                 if (vt == VT_VARIANT) {
56                         // Variant\82Ì\83|\83C\83\93\83^\82Ì\8fê\8d\87\82Í\81A\82»\82Ì\83|\83C\83\93\83^\82ð\83R\83s\81[\82·\82é\82Ì\82Ý
57                         return VariantCopy(pDestVal, pSrcVal->pvarVal);
58                 }
59                 else {
60                         // \8c^\95Ï\8a·\82ð\8eg\82Á\82ÄByRef\82ð\8aO\82·
61                         return VariantChangeType(pDestVal, pSrcVal, 0, vt);
62                 }
63         }
64
65         // ByVal\82Ì\8fê\8d\87\82Í\83R\83s\81[\82·\82é\82Ì\82Ý
66         return VariantCopy(pDestVal, pSrcVal);
67 }