Files
Slnkdwf/ATL90/source/SProxy/sproxy.srf
Jos Groot Lipman 0e37d774d2 Merge SLNKDWF64 branch
svn path=/Slnkdwf/trunk/; revision=23911
2015-01-21 12:09:31 +00:00

659 lines
20 KiB
Plaintext

//
// sproxy.exe generated file
// do not modify this file
//
// Created: {{GetDateTime}}
//
{{if EmitPragma}}
#pragma once
{{endif}}
{{if GenProxy}}
#if !defined(_WIN32_WINDOWS) && !defined(_WIN32_WINNT) && !defined(_WIN32_WCE)
#pragma message("warning: defining _WIN32_WINDOWS = 0x0410")
#define _WIN32_WINDOWS 0x0410
#endif
#include <atlsoap.h>
{{endif}}
{{if EmitNamespace}}
namespace {{GetCppNamespace}}
{
{{endif}}
{{while GetNextEnum}}
enum {{GetEnumCppName}} { {{while GetNextEnumElement}}{{GetEnumElementCppName}} = {{GetEnumElementValue}}, {{endwhile}}};{{ResetCounter}}
{{endwhile}}
{{while GetNextStruct}}
struct {{GetStructCppName}}
{
{{while GetNextStructField}}
{{GetStructFieldCppType}} {{if IsFieldDynamicArray}}*{{endif}}{{GetStructFieldCppName}}{{GetStructFieldSuffix}};
{{if IsFieldDynamicArray}}
{{if FieldHasSizeIs}}
{{else}}
int __{{GetStructFieldCppName}}_nSizeIs;
{{endif}}
{{endif}}
{{endwhile}}
};
{{endwhile}}
{{if GenProxy}}
template <typename TClient = CSoapSocketClientT<> >
class {{GetClassName}}T :
public TClient,
public CSoapRootHandler
{
{{if ClassHasHeaders}}
public:
//
// SOAP headers
//
{{while GetNextMember}}
{{GetMemberCppType}} {{GetMemberCppName}}{{GetMemberSuffix}};
{{endwhile}}
{{endif}}
protected:
const _soapmap ** GetFunctionMap();
const _soapmap ** GetHeaderMap();
void * GetHeaderValue();
const wchar_t * GetNamespaceUri();
const char * GetServiceName();
const char * GetNamespaceUriA();
HRESULT CallFunction(
void *pvParam,
const wchar_t *wszLocalName, int cchLocalName,
size_t nItem);
HRESULT GetClientReader(ISAXXMLReader **ppReader);
public:
HRESULT __stdcall QueryInterface(REFIID riid, void **ppv)
{
if (ppv == NULL)
{
return E_POINTER;
}
*ppv = NULL;
if (InlineIsEqualGUID(riid, IID_IUnknown) ||
InlineIsEqualGUID(riid, IID_ISAXContentHandler))
{
*ppv = static_cast<ISAXContentHandler *>(this);
return S_OK;
}
return E_NOINTERFACE;
}
ULONG __stdcall AddRef()
{
return 1;
}
ULONG __stdcall Release()
{
return 1;
}
{{GetClassName}}T(ISAXXMLReader *pReader = NULL)
:TClient(_T("{{GetURL}}"))
{
SetClient(true);
SetReader(pReader);
{{if ClassHasHeaders}}
//
// initialize headers
//
{{while GetNextMember}}
{{if IsMemberFixedArray}}
memset({{GetMemberCppName}}, 0x00, sizeof({{GetMemberCppType}}{{GetMemberSuffix}}));
{{else}}
{{if IsMemberUDT}}
memset(&{{GetMemberCppName}}, 0x00, sizeof({{GetMemberCppType}}));
{{else}}
{{if IsMemberEnum}}
{{GetMemberCppName}} = ({{GetMemberCppType}})0;
{{else}}
{{GetMemberCppName}} = 0;
{{endif}}
{{endif}}
{{endif}}
{{endwhile}}
{{endif}}
}
~{{GetClassName}}T()
{
Uninitialize();
}
void Uninitialize()
{
UninitializeSOAP();
{{if ClassHasHeaders}}
//
// uninitialize headers
//
{{while GetNextMember}}
{{if IsMemberFixedArray}}
AtlCleanupArrayEx({{GetMemberCppName}}, (sizeof({{GetMemberCppType}}{{GetMemberSuffix}}))/(sizeof({{GetMemberCppType}})), GetMemMgr());
{{else}}
AtlCleanupValueEx(&{{GetMemberCppName}}, GetMemMgr());
{{endif}}
{{endwhile}}
{{endif}}
}
{{while GetNextFunction}}
HRESULT {{GetFunctionCppName}}(
{{while GetNextParameter}}
{{GetParameterCppType}}{{if IsParameterDynamicArray}}*{{endif}}{{if IsOutParameter}}{{if NotIsParameterFixedArray}}*{{endif}}{{endif}} {{GetParameterCppName}}{{GetParameterSuffix}}{{if IsParameterDynamicArray}}, int{{if IsOutParameter}}*{{endif}} {{GetParameterCppName}}_nSizeIs{{endif}}{{if NotIsLastParameter}}, {{endif}}
{{endwhile}} );
{{endwhile}}
};
typedef {{GetClassName}}T<> {{GetClassName}};
{{while GetNextEnum}}
__if_not_exists(__{{GetEnumSafeCppQName}}_entries)
{
extern __declspec(selectany) const _soapmapentry __{{GetEnumSafeCppQName}}_entries[] =
{
{{while GetNextEnumElement}}
{ {{GetEnumElementHashW}}, "{{GetEnumElementName}}", L"{{GetEnumElementName}}", sizeof("{{GetEnumElementName}}")-1, {{GetEnumElementValue}}, SOAPFLAG_FIELD, 0, NULL, NULL, -1 },
{{endwhile}}
{ 0x00000000 }
};
extern __declspec(selectany) const _soapmap __{{GetEnumSafeCppQName}}_map =
{
{{GetEnumNameHashW}},
"{{GetEnumName}}",
L"{{GetEnumName}}",
sizeof("{{GetEnumName}}")-1,
sizeof("{{GetEnumName}}")-1,
SOAPMAP_ENUM,
__{{GetEnumSafeCppQName}}_entries,
sizeof({{GetEnumCppQName}}),
1,
-1,
SOAPFLAG_NONE,
{{GetEnumNamespaceHashW}},
"{{GetEnumNamespace}}",
L"{{GetEnumNamespace}}",
sizeof("{{GetEnumNamespace}}")-1
};
}
{{ResetCounter}}{{endwhile}}
{{while GetNextStruct}}
__if_not_exists(__{{GetStructSafeCppQName}}_entries)
{
{{while GetNextStructField}}
{{if IsFieldFixedArray}}
extern __declspec(selectany) const int __{{GetStructSafeCppQName}}_{{GetStructFieldCppName}}_dims[] = {{GetStructFieldDimsDecl}};
{{endif}}
{{endwhile}}
extern __declspec(selectany) const _soapmapentry __{{GetStructSafeCppQName}}_entries[] =
{
{{while GetNextStructField}}
{
{{GetStructFieldHashW}},
"{{GetStructFieldName}}",
L"{{GetStructFieldName}}",
sizeof("{{GetStructFieldName}}")-1,
{{GetStructFieldAtlSoapType}},
SOAPFLAG_FIELD{{if IsFieldFixedArray}} | SOAPFLAG_FIXEDARR{{endif}}{{if IsFieldDynamicArray}} | SOAPFLAG_DYNARR{{endif}}{{if IsFieldDynamicArrayWrapper}} | SOAPFLAG_DYNARRWRAPPER{{endif}}{{if IsFieldNullable}} | SOAPFLAG_NULLABLE{{endif}}{{if IsFieldSizeIs}} | SOAPFLAG_SIZEIS{{endif}},
offsetof({{GetStructCppQName}}, {{GetStructFieldCppName}}),
{{if IsFieldFixedArray}}__{{GetStructSafeCppQName}}_{{GetStructFieldCppName}}_dims{{else}}NULL{{endif}},
{{if IsFieldUDT}}&__{{GetStructFieldTypeSafeCppQName}}_map{{else}}NULL{{endif}},
{{if IsFieldDynamicArray}}{{if FieldHasSizeIs}}{{GetFieldSizeIsIndex}}{{else}}{{GetCurrentFieldIndex}}+1{{endif}}{{else}}-1{{endif}}
},
{{if IsFieldDynamicArray}}
{{if FieldHasSizeIs}}
{{else}}
{
{{GetStructFieldHashW}},
"{{GetStructFieldName}}",
L"{{GetStructFieldName}}",
sizeof("{{GetStructFieldName}}")-1,
SOAPTYPE_INT,
SOAPFLAG_FIELD | SOAPFLAG_NOMARSHAL,
offsetof({{GetStructCppQName}}, __{{GetStructFieldCppName}}_nSizeIs),
NULL,
NULL,
-1
},
{{endif}}
{{endif}}
{{endwhile}}
{ 0x00000000 }
};
extern __declspec(selectany) const _soapmap __{{GetStructSafeCppQName}}_map =
{
{{GetStructNameHashW}},
"{{GetStructName}}",
L"{{GetStructName}}",
sizeof("{{GetStructName}}")-1,
sizeof("{{GetStructName}}")-1,
SOAPMAP_STRUCT,
__{{GetStructSafeCppQName}}_entries,
sizeof({{GetStructCppQName}}),
{{GetStructFieldCount}},
-1,
SOAPFLAG_NONE,
{{GetStructNamespaceHashW}},
"{{GetStructNamespace}}",
L"{{GetStructNamespace}}",
sizeof("{{GetStructNamespace}}")-1
};
}
{{endwhile}}
{{while GetNextFunction}}
{{while GetNextParameter}}
{{if IsParameterFixedArray}}
extern __declspec(selectany) const int __{{GetClassSafeQName}}_{{GetFunctionCppName}}_{{GetParameterCppName}}_dims[] = {{GetParameterDimsDecl}};
{{endif}}
{{endwhile}}
struct __{{GetClassSafeQName}}_{{GetFunctionCppName}}_struct
{
{{while GetNextParameter}}
{{GetParameterCppType}} {{if IsParameterDynamicArray}}*{{endif}}{{GetParameterCppName}}{{GetParameterSuffix}};
{{if IsParameterDynamicArray}}
int __{{GetParameterCppName}}_nSizeIs;
{{endif}}
{{endwhile}}
};
extern __declspec(selectany) const _soapmapentry __{{GetClassSafeQName}}_{{GetFunctionCppName}}_entries[] =
{
{{if HasRetval}}
{{GetRetval}}
{
{{GetParameterHashW}},
"{{GetParameterName}}",
L"{{GetParameterName}}",
sizeof("{{GetParameterName}}")-1,
{{GetParameterAtlSoapType}},
SOAPFLAG_RETVAL{{if IsInParameter}} | SOAPFLAG_IN{{endif}}{{if IsOutParameter}} | SOAPFLAG_OUT{{endif}}{{if IsParameterDynamicArray}} | SOAPFLAG_DYNARR{{endif}}{{if IsParameterFixedArray}} | SOAPFLAG_FIXEDARR{{endif}}{{if IsParameterNullable}} | SOAPFLAG_NULLABLE{{endif}},
offsetof(__{{GetClassSafeQName}}_{{GetFunctionCppName}}_struct, {{GetParameterCppName}}),
{{if IsParameterFixedArray}}__{{GetClassSafeQName}}_{{GetFunctionCppName}}_{{GetParameterCppName}}_dims{{else}}NULL{{endif}},
{{if IsParameterUDT}}&__{{GetParameterTypeCppQName}}_map{{else}}NULL{{endif}},
{{if IsParameterDynamicArray}}{{GetSizeIsIndex}}{{else}}-1{{endif}},
},
{{endif}}
{{ResetParameterIndex}}
{{while GetNextParameter}}
{{if NotIsRetval}}
{
{{GetParameterHashW}},
"{{GetParameterNameRaw}}",
L"{{GetParameterNameRaw}}",
sizeof("{{GetParameterNameRaw}}")-1,
{{GetParameterAtlSoapType}},
SOAPFLAG_NONE{{if IsInParameter}} | SOAPFLAG_IN{{endif}}{{if IsOutParameter}} | SOAPFLAG_OUT{{endif}}{{if IsParameterDynamicArray}} | SOAPFLAG_DYNARR{{endif}}{{if IsParameterFixedArray}} | SOAPFLAG_FIXEDARR{{endif}}{{if IsPAD}} | SOAPFLAG_PAD{{if IsChain}} | SOAPFLAG_CHAIN{{endif}}{{endif}}{{if IsPID}} | SOAPFLAG_PID{{endif}}{{if IsDocument}} | SOAPFLAG_DOCUMENT{{endif}}{{if IsRpc}} | SOAPFLAG_RPC{{endif}}{{if IsLiteral}} | SOAPFLAG_LITERAL{{endif}}{{if IsEncoded}} | SOAPFLAG_ENCODED{{endif}}{{if IsParameterNullable}} | SOAPFLAG_NULLABLE{{endif}},
offsetof(__{{GetClassSafeQName}}_{{GetFunctionCppName}}_struct, {{GetParameterCppName}}),
{{if IsParameterFixedArray}}__{{GetClassSafeQName}}_{{GetFunctionCppName}}_{{GetParameterCppName}}_dims{{else}}NULL{{endif}},
{{if IsParameterUDT}}&__{{GetParameterTypeCppQName}}_map{{else}}NULL{{endif}},
{{if IsParameterDynamicArray}}{{GetCurrentParameterIndex}}+1{{else}}-1{{endif}},
},
{{if IsParameterDynamicArray}}
{
{{GetParameterHashW}},
"__{{GetParameterNameRaw}}_nSizeIs",
L"__{{GetParameterNameRaw}}_nSizeIs",
sizeof("__{{GetParameterNameRaw}}_nSizeIs")-1,
SOAPTYPE_INT,
SOAPFLAG_NOMARSHAL,
offsetof(__{{GetClassSafeQName}}_{{GetFunctionCppName}}_struct, __{{GetParameterCppName}}_nSizeIs),
NULL,
NULL,
-1
},
{{endif}}
{{endif}}
{{endwhile}}
{ 0x00000000 }
};
extern __declspec(selectany) const _soapmap __{{GetClassSafeQName}}_{{GetFunctionCppName}}_map =
{
{{GetFunctionResultNameHashW}},
"{{GetFunctionSendName}}",
L"{{GetFunctionResultName}}",
sizeof("{{GetFunctionSendName}}")-1,
sizeof("{{GetFunctionResultName}}")-1,
SOAPMAP_FUNC,
__{{GetClassSafeQName}}_{{GetFunctionCppName}}_entries,
sizeof(__{{GetClassSafeQName}}_{{GetFunctionCppName}}_struct),
{{GetExpectedParameterCount}},
{{if HasRetval}}
0,
{{else}}
-1,
{{endif}}
SOAPFLAG_NONE{{if IsPAD}} | SOAPFLAG_PAD{{if IsChain}} | SOAPFLAG_CHAIN{{endif}}{{endif}}{{if IsPID}} | SOAPFLAG_PID{{endif}}{{if IsDocument}} | SOAPFLAG_DOCUMENT{{endif}}{{if IsRpc}} | SOAPFLAG_RPC{{endif}}{{if IsLiteral}} | SOAPFLAG_LITERAL{{endif}}{{if IsEncoded}} | SOAPFLAG_ENCODED{{endif}},
{{GetFunctionNamespaceHashW}},
"{{GetFunctionNamespace}}",
L"{{GetFunctionNamespace}}",
sizeof("{{GetFunctionNamespace}}")-1
};
{{endwhile}}
extern __declspec(selectany) const _soapmap * __{{GetClassSafeQName}}_funcs[] =
{
{{while GetNextFunction}}
&__{{GetClassSafeQName}}_{{GetFunctionCppName}}_map,
{{endwhile}}
NULL
};
{{while GetNextFunction}}
template <typename TClient>
inline HRESULT {{GetClassName}}T<TClient>::{{GetFunctionCppName}}(
{{while GetNextParameter}}
{{GetParameterCppType}}{{if IsParameterDynamicArray}}*{{endif}}{{if IsOutParameter}}{{if NotIsParameterFixedArray}}*{{endif}}{{endif}} {{GetParameterCppName}}{{GetParameterSuffix}}{{if IsParameterDynamicArray}}, int{{if IsOutParameter}}*{{endif}} __{{GetParameterCppName}}_nSizeIs{{endif}}{{if NotIsLastParameter}}, {{endif}}
{{endwhile}} )
{
{{while GetNextParameter}}{{if IsParameterDynamicArray}}{{if IsOutParameter}} if ( {{GetParameterCppName}}{{GetParameterSuffix}} == NULL )
return E_POINTER;
if( __{{GetParameterCppName}}_nSizeIs == NULL )
return E_POINTER;
{{endif}}
{{else}}
{{if IsOutParameter}}{{if NotIsParameterFixedArray}} if ( {{GetParameterCppName}}{{GetParameterSuffix}} == NULL )
return E_POINTER;
{{endif}}{{endif}}
{{endif}}
{{endwhile}}
HRESULT __atlsoap_hr = InitializeSOAP(NULL);
if (FAILED(__atlsoap_hr))
{
SetClientError(SOAPCLIENT_INITIALIZE_ERROR);
return __atlsoap_hr;
}
CleanupClient();
CComPtr<IStream> __atlsoap_spReadStream;
__{{GetClassSafeQName}}_{{GetFunctionCppName}}_struct __params;
memset(&__params, 0x00, sizeof(__params));
{{while GetNextParameter}}
{{if IsInParameter}}
{{if NotIsParameterFixedArray}}
__params.{{GetParameterCppName}} = {{if IsOutParameter}}*{{endif}}{{GetParameterCppName}};
{{else}}
memcpy(__params.{{GetParameterCppName}}, {{GetParameterCppName}}, {{GetParameterFixedArraySize}}*sizeof({{GetParameterCppType}}));
{{endif}}
{{if IsParameterDynamicArray}}
__params.__{{GetParameterCppName}}_nSizeIs = {{if IsOutParameter}}*{{endif}}__{{GetParameterCppName}}_nSizeIs;
{{endif}}
{{endif}}
{{endwhile}}
__atlsoap_hr = SetClientStruct(&__params, {{GetFunctionIndex}});
if (FAILED(__atlsoap_hr))
{
SetClientError(SOAPCLIENT_OUTOFMEMORY);
goto __skip_cleanup;
}
__atlsoap_hr = GenerateResponse(GetWriteStream());
if (FAILED(__atlsoap_hr))
{
SetClientError(SOAPCLIENT_GENERATE_ERROR);
goto __skip_cleanup;
}
__atlsoap_hr = SendRequest(_T("SOAPAction: \"{{GetSoapAction}}\"\r\n"));
if (FAILED(__atlsoap_hr))
{
goto __skip_cleanup;
}
{{if IsOneWay}}
if (GetStatusCode() != 202)
{
SetClientError(SOAPCLIENT_SERVER_ERROR);
__atlsoap_hr = E_FAIL;
}
{{else}}
__atlsoap_hr = GetReadStream(&__atlsoap_spReadStream);
if (FAILED(__atlsoap_hr))
{
SetClientError(SOAPCLIENT_READ_ERROR);
goto __skip_cleanup;
}
// cleanup any in/out-params and out-headers from previous calls
Cleanup();
__atlsoap_hr = BeginParse(__atlsoap_spReadStream);
if (FAILED(__atlsoap_hr))
{
SetClientError(SOAPCLIENT_PARSE_ERROR);
goto __cleanup;
}
{{while GetNextParameter}}
{{if IsOutParameter}}
{{if NotIsParameterFixedArray}}
*{{GetParameterCppName}} = __params.{{GetParameterCppName}};
{{else}}
memcpy({{GetParameterCppName}}, __params.{{GetParameterCppName}}, {{GetParameterFixedArraySize}}*sizeof({{GetParameterCppType}}));
{{endif}}
{{if IsParameterDynamicArray}}
*__{{GetParameterCppName}}_nSizeIs = __params.__{{GetParameterCppName}}_nSizeIs;
{{endif}}
{{endif}}
{{endwhile}}
{{endif}}
goto __skip_cleanup;
__cleanup:
Cleanup();
__skip_cleanup:
ResetClientState(true);
memset(&__params, 0x00, sizeof(__params));
return __atlsoap_hr;
}
{{endwhile}}
template <typename TClient>
ATL_NOINLINE inline const _soapmap ** {{GetClassName}}T<TClient>::GetFunctionMap()
{
return __{{GetClassSafeQName}}_funcs;
}
template <typename TClient>
ATL_NOINLINE inline const _soapmap ** {{GetClassName}}T<TClient>::GetHeaderMap()
{
{{while GetNextFunction}}
{{while GetNextHeader}}
{{if IsHeaderFixedArray}}
__if_not_exists(__{{GetClassSafeQName}}_{{GetHeaderCppValue}}_dims)
{
static const int __{{GetClassSafeQName}}_{{GetHeaderCppValue}}_dims[] = {{GetHeaderDimsDecl}};
}
{{endif}}
{{endwhile}}
static const _soapmapentry __{{GetClassSafeQName}}_{{GetFunctionCppName}}_atlsoapheader_entries[] =
{
{{while GetNextHeader}}
{
{{GetHeaderHashW}},
"{{GetHeaderValue}}",
L"{{GetHeaderValue}}",
sizeof("{{GetHeaderValue}}")-1,
{{GetHeaderAtlSoapType}},
SOAPFLAG_NONE{{if IsInHeader}} | SOAPFLAG_IN{{endif}}{{if IsOutHeader}} | SOAPFLAG_OUT{{endif}}{{if IsRequiredHeader}} | SOAPFLAG_MUSTUNDERSTAND{{endif}}{{if IsHeaderFixedArray}} | SOAPFLAG_FIXEDARR{{endif}}{{if IsHeaderNullable}} | SOAPFLAG_NULLABLE{{endif}},
offsetof({{GetClassName}}T, {{GetHeaderCppValue}}),
{{if IsHeaderFixedArray}}__{{GetClassSafeQName}}_{{GetHeaderCppValue}}_dims{{else}}NULL{{endif}},
{{if IsHeaderUDT}}&__{{GetHeaderTypeCppQName}}_map{{else}}NULL{{endif}},
-1,
{{if IsHeaderUDT}}
{{else}}
{{if HeaderHasNamespace}}
{{GetHeaderNamespaceHashW}},
"{{GetHeaderNamespace}}",
L"{{GetHeaderNamespace}}",
sizeof("{{GetHeaderNamespace}}")-1
{{endif}}
{{endif}}
},
{{endwhile}}
{ 0x00000000 }
};
static const _soapmap __{{GetClassSafeQName}}_{{GetFunctionCppName}}_atlsoapheader_map =
{
{{GetFunctionResultNameHashW}},
"{{GetFunctionSendName}}",
L"{{GetFunctionResultName}}",
sizeof("{{GetFunctionSendName}}")-1,
sizeof("{{GetFunctionResultName}}")-1,
SOAPMAP_HEADER,
__{{GetClassSafeQName}}_{{GetFunctionCppName}}_atlsoapheader_entries,
0,
{{GetExpectedHeaderCount}},
-1,
SOAPFLAG_NONE{{if IsPAD}} | SOAPFLAG_PAD{{if IsChain}} | SOAPFLAG_CHAIN{{endif}}{{endif}}{{if IsPID}} | SOAPFLAG_PID{{endif}}{{if IsDocument}} | SOAPFLAG_DOCUMENT{{endif}}{{if IsRpc}} | SOAPFLAG_RPC{{endif}}{{if IsLiteral}} | SOAPFLAG_LITERAL{{endif}}{{if IsEncoded}} | SOAPFLAG_ENCODED{{endif}},
{{GetFunctionNamespaceHashW}},
"{{GetFunctionNamespace}}",
L"{{GetFunctionNamespace}}",
sizeof("{{GetFunctionNamespace}}")-1
};
{{endwhile}}
static const _soapmap * __{{GetClassSafeQName}}_headers[] =
{
{{while GetNextFunction}}
&__{{GetClassSafeQName}}_{{GetFunctionCppName}}_atlsoapheader_map,
{{endwhile}}
NULL
};
return __{{GetClassSafeQName}}_headers;
}
template <typename TClient>
ATL_NOINLINE inline void * {{GetClassName}}T<TClient>::GetHeaderValue()
{
return this;
}
template <typename TClient>
ATL_NOINLINE inline const wchar_t * {{GetClassName}}T<TClient>::GetNamespaceUri()
{
return L"{{GetNamespace}}";
}
template <typename TClient>
ATL_NOINLINE inline const char * {{GetClassName}}T<TClient>::GetServiceName()
{
return NULL;
}
template <typename TClient>
ATL_NOINLINE inline const char * {{GetClassName}}T<TClient>::GetNamespaceUriA()
{
return "{{GetNamespace}}";
}
template <typename TClient>
ATL_NOINLINE inline HRESULT {{GetClassName}}T<TClient>::CallFunction(
void *,
const wchar_t *, int,
size_t)
{
return E_NOTIMPL;
}
template <typename TClient>
ATL_NOINLINE inline HRESULT {{GetClassName}}T<TClient>::GetClientReader(ISAXXMLReader **ppReader)
{
if (ppReader == NULL)
{
return E_INVALIDARG;
}
CComPtr<ISAXXMLReader> spReader = GetReader();
if (spReader.p != NULL)
{
*ppReader = spReader.Detach();
return S_OK;
}
return TClient::GetClientReader(ppReader);
}
{{if EmitNamespace}}
} // namespace {{GetCppNamespace}}
{{endif}}
{{while GetNextStruct}}
template<>
inline HRESULT AtlCleanupValue<{{if EmitNamespace}}{{GetCppNamespace}}::{{endif}}{{GetStructCppName}}>({{if EmitNamespace}}{{GetCppNamespace}}::{{endif}}{{GetStructCppName}} *pVal)
{
pVal;
{{while GetNextStructField}}
{{if IsFieldFixedArray}}
AtlCleanupArrayMD(pVal->{{GetStructFieldCppName}}, {{if EmitNamespace}}{{GetCppNamespace}}::{{endif}}__{{GetStructSafeCppQName}}_{{GetStructFieldCppName}}_dims);
{{else}}
{{if IsFieldDynamicArray}}
AtlCleanupArray(pVal->{{GetStructFieldCppName}}, pVal->{{if FieldHasSizeIs}}{{GetFieldSizeIsName}}{{else}}__{{GetStructFieldCppName}}_nSizeIs{{endif}});
{{else}}
AtlCleanupValue(&pVal->{{GetStructFieldCppName}});
{{endif}}
{{endif}}
{{endwhile}}
return S_OK;
}
template<>
inline HRESULT AtlCleanupValueEx<{{if EmitNamespace}}{{GetCppNamespace}}::{{endif}}{{GetStructCppName}}>({{if EmitNamespace}}{{GetCppNamespace}}::{{endif}}{{GetStructCppName}} *pVal, IAtlMemMgr *pMemMgr)
{
pVal;
pMemMgr;
{{while GetNextStructField}}
{{if IsFieldFixedArray}}
AtlCleanupArrayMDEx(pVal->{{GetStructFieldCppName}}, {{if EmitNamespace}}{{GetCppNamespace}}::{{endif}}__{{GetStructSafeCppQName}}_{{GetStructFieldCppName}}_dims, pMemMgr);
{{else}}
{{if IsFieldDynamicArray}}
if (pVal->{{GetStructFieldCppName}} != NULL)
{
AtlCleanupArrayEx(pVal->{{GetStructFieldCppName}}, pVal->{{if FieldHasSizeIs}}{{GetFieldSizeIsName}}{{else}}__{{GetStructFieldCppName}}_nSizeIs{{endif}}, pMemMgr);
pMemMgr->Free(pVal->{{GetStructFieldCppName}});
}
{{else}}
AtlCleanupValueEx(&pVal->{{GetStructFieldCppName}}, pMemMgr);
{{endif}}
{{endif}}
{{endwhile}}
return S_OK;
}
{{endwhile}}
{{endif}}