Listing 12: String length shims
/* ///////////////////////////////////////////////////////////// * Extract from stlsoft_string_access.h, comstl_string_access.h, * mfcstl_string_access.h, winstl_string_access.h * * www: http://stlsoft.org/, http://comstl.org/ * http://mfcstl.org/, http://winstl.org/ * * Copyright (C) 2002, Synesis Software Pty Ltd. * (Licensed under the Synesis Software Standard Source License: * http://www.synesis.com.au/licenses/ssssl.html) * ////////////////////////////////////////////////////////// */ namespace stlsoft { /* C-style Unicode string */ inline size_t c_str_len(wchar_t const *s) { return (s == 0) ? 0 : char_traits<wchar_t>::length(s); } } // namespace stlsoft namespace comstl { const size_t COMSTL_CCH_GUID = 38; // Fixed format & length /* GUID */ inline size_t c_str_len(GUID const &/* guid */) { return COMSTL_CCH_GUID; } /* VARIANT */ inline size_t c_str_len(VARIANT const &v) { if(v.vt == VT_BSTR) { return ::SysStringLen(v.bstrVal); } else { // Do a copy and conversion to VT_BSTR and get // length from that ... } } // namespace comstl namespace mfcstl { /* CString */ inline size_t c_str_len(CString const &s) { return s.GetLength(); } } // namespace mfcstl namespace winstl { /* HWND */ inline size_t c_str_len(HWND h) { return static_cast<size_t>(::GetWindowTextLength(h)); } /* LSA_UNICODE_STRING */ inline size_t c_str_len(LSA_UNICODE_STRING const &s) { return s.Length; } } // namespace winstl