144 lines
3.1 KiB
Markdown
144 lines
3.1 KiB
Markdown
#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 with `common.props`, `Debug.props`, `Release.props`, `Win32.props`, and `x64.props` files to customize building process for individual applications.
|
|
|
|
##Usage
|
|
1. Clone the repository into your solution folder.
|
|
2. Add the `WinStd.vcxproj` to your solution.
|
|
3. Add WinStd's `include` folder to _Additional Include Directories_ in your project's C/C++ settings.
|
|
4. Add a new reference to WinStd project from your project's common properties.
|
|
5. Include `.h` files from WinStd as needed:
|
|
```C
|
|
#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
|
|
)
|
|
)
|
|
)
|
|
}
|
|
```
|