00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 
00031 
00032 
00033 
00034 
00035 
00036 
00037 
00038 
00039 
00040 
00041 
00042 
00043 
00044 
00051 #ifndef COMSTL_INCL_COMSTL_UTIL_HPP_CREATION_FUNCTIONS
00052 #define COMSTL_INCL_COMSTL_UTIL_HPP_CREATION_FUNCTIONS
00053 
00054 #ifndef STLSOFT_DOCUMENTATION_SKIP_SECTION
00055 # define COMSTL_VER_COMSTL_UTIL_HPP_CREATION_FUNCTIONS_MAJOR    2
00056 # define COMSTL_VER_COMSTL_UTIL_HPP_CREATION_FUNCTIONS_MINOR    3
00057 # define COMSTL_VER_COMSTL_UTIL_HPP_CREATION_FUNCTIONS_REVISION 2
00058 # define COMSTL_VER_COMSTL_UTIL_HPP_CREATION_FUNCTIONS_EDIT     22
00059 #endif 
00060 
00061 
00062 
00063 
00064 
00065 #ifndef COMSTL_INCL_COMSTL_H_COMSTL
00066 # include <comstl/comstl.h>
00067 #endif 
00068 #ifndef COMSTL_INCL_COMSTL_UTIL_HPP_INTERFACE_TRAITS
00069 # include <comstl/util/interface_traits.hpp>
00070 #endif 
00071 #ifndef STLSOFT_INCL_STLSOFT_SMARTPTR_HPP_REF_PTR
00072 # include <stlsoft/smartptr/ref_ptr.hpp>
00073 #endif 
00074 
00075 
00076 
00077 
00078 
00079 #ifndef _COMSTL_NO_NAMESPACE
00080 # if defined(_STLSOFT_NO_NAMESPACE) || \
00081      defined(STLSOFT_DOCUMENTATION_SKIP_SECTION)
00082 
00083 namespace comstl
00084 {
00085 # else
00086 
00087 
00088 namespace stlsoft
00089 {
00090 
00091 namespace comstl_project
00092 {
00093 
00094 # endif 
00095 #endif 
00096 
00097 
00098 
00099 
00100 
00123 template <ss_typename_param_k I>
00124 inline HRESULT co_create_instance(
00125     REFCLSID    clsid
00126 ,   I**         ppi
00127 ,   DWORD       dwClsContext = CLSCTX_ALL
00128 )
00129 {
00130     return ::CoCreateInstance(clsid, NULL, dwClsContext, IID_traits<I>::iid(), reinterpret_cast<void**>(ppi));
00131 }
00132 
00168 template <ss_typename_param_k I>
00169 inline HRESULT co_create_instance(
00170     LPCOLESTR   id
00171 ,   I**         ppi
00172 ,   DWORD       dwClsContext = CLSCTX_ALL
00173 )
00174 {
00175     CLSID   clsid;
00176     HRESULT hr = ::CLSIDFromProgID(id, &clsid);
00177 
00178     if(FAILED(hr))
00179     {
00180         hr = ::CLSIDFromString(const_cast<LPOLESTR>(id), &clsid);
00181     }
00182 
00183     if(SUCCEEDED(hr))
00184     {
00185         hr = co_create_instance(clsid, ppi, dwClsContext);
00186     }
00187 
00188     return hr;
00189 }
00190 
00191 
00217 template<   ss_typename_param_k T
00218         ,   ss_typename_param_k I
00219         ,   ss_typename_param_k U
00220         >
00221 inline HRESULT co_create_instance(
00222     REFCLSID                            clsid
00223 ,   stlsoft_ns_qual(ref_ptr)<T, I, U>&  wi
00224 ,   DWORD                               dwClsContext = CLSCTX_ALL
00225 )
00226 {
00227     I*      pi;
00228     HRESULT hr = co_create_instance(clsid, &pi, dwClsContext);
00229 
00230     if(FAILED(hr))
00231     {
00232         pi = NULL;
00233     }
00234 
00235     wi.set(pi, false); 
00236 
00237     return hr;
00238 }
00239 
00278 template<   ss_typename_param_k T
00279         ,   ss_typename_param_k I
00280         ,   ss_typename_param_k U
00281         >
00282 inline HRESULT co_create_instance(
00283     LPCOLESTR                           id
00284 ,   stlsoft_ns_qual(ref_ptr)<T, I, U>&  wi
00285 ,   DWORD                               dwClsContext = CLSCTX_ALL
00286 )
00287 {
00288     I*      pi;
00289     HRESULT hr = co_create_instance(id, &pi, dwClsContext);
00290 
00291     if(FAILED(hr))
00292     {
00293         pi = NULL;
00294     }
00295 
00296     wi = stlsoft_ns_qual(ref_ptr)<T, I, U>(pi, false); 
00297 
00298     return hr;
00299 }
00300 
00301 
00302 
00303 #ifndef _COMSTL_NO_NAMESPACE
00304 # if defined(_STLSOFT_NO_NAMESPACE) || \
00305      defined(STLSOFT_DOCUMENTATION_SKIP_SECTION)
00306 } 
00307 # else
00308 } 
00309 } 
00310 # endif 
00311 #endif 
00312 
00313 
00314 
00315 #endif 
00316 
00317