3.1 KiB
3.1 KiB
#WinStd Provides additional templates and function helpers for Windows API using Standard C++
##Building
- The
.h
files can be used individually. However, we do encourage you to include the entire library project and reference it in dependant projects of your solution, as WinStd might develop some non-inline code over time. - The
WinStd.vcxproj
requires Microsoft Visual Studio 2010 SP1 and..\..\include
folder withcommon.props
,Debug.props
,Release.props
,Win32.props
, andx64.props
files to customize building process for individual applications.
##Usage
- Clone the repository into your solution folder.
- Add the
WinStd.vcxproj
to your solution. - Add WinStd's
include
folder to Additional Include Directories in your project's C/C++ settings. - Add a new reference to WinStd project from your project's common properties.
- Include
.h
files from WinStd as needed:
#include <WinStd/Shell.h>
#include <string>
#include <iostream>
void main()
{
std::wstring path;
PathCanonicalize(path, _T("C:\\Windows\\Temp\\test\\.."));
std::cout << (LPCTSTR)path << std::endl;
}
##Debugging
For user friendlier display of variables of WinStd types in Visual Studio 2010 debugger, find the file autoexp.dat
in your C:\Program Files (x86)\Microsoft Visual Studio 2010
and open it with Notepad.
Locate the [AutoExpand]
section and add the following lines:
winstd::variant=$BUILTIN(VARIANT)
Locate the [Visualizer]
section and add the following lines:
; WinStd
winstd::com_obj<*>|winstd::handle<*>|winstd::dplhandle<*>|winstd::cert_context|winstd::cert_chain_context|winstd::cert_store|winstd::crypt_prov|winstd::crypt_hash|winstd::crypt_key|winstd::event_provider|winstd::library|winstd::heap{
preview ([$e.m_h])
}
winstd::bstr{
preview ([$e.m_h,su])
stringview ([$e.m_h,sub])
}
winstd::vector_queue<*>{
preview (
#(
"[",
$e.m_count,
"](",
#array(
expr: $e.m_data._Myptr[($e.m_head + $i)%$e.m_size_max],
size: $e.m_count
),
")"
)
)
children (
#(
#([size] : $e.m_count),
#([capacity] : $e.m_size_max),
#array(
expr: $e.m_data._Myptr[($e.m_head + $i)%$e.m_size_max],
size: $e.m_count
)
)
)
}
winstd::sanitizing_vector<*>{
preview (
#(
"S[",
$e._Mylast - $e._Myfirst,
"](",
#array(
expr: $e._Myfirst[$i],
size: $e._Mylast - $e._Myfirst
),
")"
)
)
children (
#(
#([size] : $e._Mylast - $e._Myfirst),
#([capacity] : $e._Myend - $e._Myfirst),
#array(
expr: $e._Myfirst[$i],
size: $e._Mylast - $e._Myfirst
)
)
)
}
winstd::eap_attr{
preview (
#(
$e.eaType,
" [",
$e.dwLength,
"](",
#array(
expr: $e.pValue[$i],
size: $e.dwLength
),
")"
)
)
children (
#(
#([type] : $e.eaType),
#([size] : $e.dwLength),
#array(
expr: $e.pValue[$i],
size: $e.dwLength
)
)
)
}
winstd::event_data{
preview (
#(
"[",
$e.Size,
"](",
#array(
expr: [((unsigned char*)$e.Ptr)[$i],x],
size: $e.Size
),
")"
)
)
children (
#(
#([size] : $e.Size),
#array(
expr: [((unsigned char*)$e.Ptr)[$i],x],
size: $e.Size
)
)
)
}