<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Bakkalaureatsarbeit</title>
        <link>http://geekswithblogs.net/dastblog/category/5179.aspx</link>
        <description>Bakkalaureatsarbeit</description>
        <language>de-AT</language>
        <copyright>Daniel Strigl</copyright>
        <generator>Subtext Version 0.0.0.0</generator>
        <item>
            <title>Combine Matlab and DirectShow</title>
            <link>http://geekswithblogs.net/dastblog/archive/2007/05/25/112747.aspx</link>
            <description>&lt;p&gt;Some weeks ago I had the idea to combine Matlab and DirectShow, and here's the result ...&lt;/p&gt;
&lt;p&gt;&lt;img alt="" src="http://geekswithblogs.net/images/geekswithblogs_net/dastblog/6637/o_MatlabVideoFilter.png" /&gt;&lt;/p&gt;
&lt;p&gt;... a DirectShow filter that will use Matlab to transform a video stream.&lt;/p&gt;
&lt;p&gt;The filter will accept the path to a M-File and the Variable Names of the Input and Output Frame.&lt;/p&gt;
&lt;p&gt;When the DirectShow Filter Graph starts the "Matlab Video Filter" starts the Matlab Command Shell automatically in the background. For each frame the "Matlab Video Filter" load the Input Frame to a Matlab matrix, put the matrix to the Matlab Command Shell, execute the M-File, get the transformed matrix back from the Matlab Command Shell and copy it to the Output Frame.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;The M-File used in the screenshot uses the "Canny Edge Filter" to extract the edges of the video stream and plot the histogram of the Input Frame:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;table width="100%" cellspacing="1" cellpadding="5" border="0" bgcolor="#000000" align="" summary=""&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td bgcolor="#cccccc" style="font-family: Courier New;"&gt; FrameOut = im2uint8(edge(FrameIn, 'canny'));&lt;br /&gt;
            imhist(FrameIn); &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;There are two versions of the "Matlab Video Filter", one for 8 Bit Grayscale video streams and one for RGB 24 video streams.&lt;/p&gt;
&lt;p&gt;Both Microsoft Visual Studio 2005 projects of the filters can be found here: &lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a href="http://homepage.uibk.ac.at/~csaf3425/MatlabVideo8BitGrayscale.zip"&gt;MatlabVideo8BitGrayscale.zip&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://homepage.uibk.ac.at/~csaf3425/MatlabVideoRgb24.zip"&gt;MatlabVideoRgb24.zip&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=112747"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=112747" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/dastblog/aggbug/112747.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Daniel Strigl</dc:creator>
            <guid>http://geekswithblogs.net/dastblog/archive/2007/05/25/112747.aspx</guid>
            <pubDate>Fri, 25 May 2007 09:13:37 GMT</pubDate>
            <comments>http://geekswithblogs.net/dastblog/archive/2007/05/25/112747.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/dastblog/comments/commentRss/112747.aspx</wfw:commentRss>
        </item>
        <item>
            <title>My second DirectShow filter</title>
            <link>http://geekswithblogs.net/dastblog/archive/2007/05/11/112415.aspx</link>
            <description>&lt;p&gt;Today I have finished my second DirectShow filter, a Transform filter to convert a RGB video stream to Grayscale.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://geekswithblogs.net/images/geekswithblogs_net/dastblog/6617/o_RGBtoGrayscale.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;The whole Microsoft Visual Studio 2005 project can be downloaded from &lt;a href="http://homepage.uibk.ac.at/~csaf3425/RGBtoGrayscale.zip"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=112415"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=112415" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/dastblog/aggbug/112415.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Daniel Strigl</dc:creator>
            <guid>http://geekswithblogs.net/dastblog/archive/2007/05/11/112415.aspx</guid>
            <pubDate>Fri, 11 May 2007 15:01:04 GMT</pubDate>
            <comments>http://geekswithblogs.net/dastblog/archive/2007/05/11/112415.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/dastblog/comments/commentRss/112415.aspx</wfw:commentRss>
        </item>
        <item>
            <title>My first DirectShow filter</title>
            <link>http://geekswithblogs.net/dastblog/archive/2007/05/04/112241.aspx</link>
            <description>&lt;p&gt; This week I have created my first DirectShow filter, a simple TransInPlace filter that will add a logo to a video stream.&lt;/p&gt;
&lt;p&gt;&lt;img alt="" src="http://geekswithblogs.net/images/geekswithblogs_net/dastblog/6593/o_LogoPainting.png" /&gt;&lt;/p&gt;
&lt;p&gt;The whole Microsoft Visual Studio 2005 project can be downloaded from &lt;a href="http://homepage.uibk.ac.at/~csaf3425/LogoPainting.zip"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=112241"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=112241" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/dastblog/aggbug/112241.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Daniel Strigl</dc:creator>
            <guid>http://geekswithblogs.net/dastblog/archive/2007/05/04/112241.aspx</guid>
            <pubDate>Fri, 04 May 2007 12:14:15 GMT</pubDate>
            <comments>http://geekswithblogs.net/dastblog/archive/2007/05/04/112241.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/dastblog/comments/commentRss/112241.aspx</wfw:commentRss>
        </item>
        <item>
            <title>My own WiFi Status Monitor</title>
            <link>http://geekswithblogs.net/dastblog/archive/2007/01/03/102624.aspx</link>
            <description>&lt;p&gt;
I have written a little MFC application that display some properties about the current association, like
&lt;ul&gt;
  &lt;li&gt;the value of the received signal strength indication (RSSI),&lt;/li&gt;
  &lt;li&gt;the service set identifier (SSID) of the BSS,&lt;/li&gt;
  &lt;li&gt;the media access control (MAC) address of the access point and&lt;/li&gt;
  &lt;li&gt;the IP address associated with the WiFi adapter.&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;

&lt;p&gt;
You will find the application under &lt;a href="http://homepage.uibk.ac.at/~csaf3425/WiFiStatus.zip"&gt;WiFiStatus.zip&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
&lt;img alt="" src="http://geekswithblogs.net/images/geekswithblogs_net/dastblog/5993/o_wifistatus1.gif"&gt;
&lt;img alt="" src="http://geekswithblogs.net/images/geekswithblogs_net/dastblog/5993/o_wifistatus2.gif"&gt;
&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=102624"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=102624" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/dastblog/aggbug/102624.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Daniel Strigl</dc:creator>
            <guid>http://geekswithblogs.net/dastblog/archive/2007/01/03/102624.aspx</guid>
            <pubDate>Wed, 03 Jan 2007 20:31:00 GMT</pubDate>
            <comments>http://geekswithblogs.net/dastblog/archive/2007/01/03/102624.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/dastblog/comments/commentRss/102624.aspx</wfw:commentRss>
        </item>
        <item>
            <title>How to connect to an WEP encrypted access point using NDISUIO?</title>
            <link>http://geekswithblogs.net/dastblog/archive/2007/01/02/102516.aspx</link>
            <description>&lt;p&gt;
The steps to connect to an WEP encrypted access point using NDISUIO are:
&lt;ul&gt;
  &lt;li&gt;Disassociate from the current service set (&lt;a href="http://msdn2.microsoft.com/en-us/library/ms799389.aspx"&gt;OID_802_11_DISASSOCIATE&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;Set network mode to &lt;b&gt;Ndis802_11Infrastructure&lt;/b&gt; (&lt;a href="http://msdn2.microsoft.com/en-us/library/ms799395.aspx"&gt;OID_802_11_INFRASTRUCTURE_MODE&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;Set privacy filter mode to &lt;b&gt;Ndis802_11PrivFilterAcceptAll&lt;/b&gt; (&lt;a href="http://msdn2.microsoft.com/en-us/library/ms799387.aspx"&gt;OID_802_11_PRIVACY_FILTER&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;Set the Wired Equivalent Privacy (WEP) keys (&lt;a href="http://msdn2.microsoft.com/en-us/library/ms799380.aspx"&gt;OID_802_11_ADD_WEP&lt;/a&gt;).
  &lt;li&gt;Set authentication mode to &lt;b&gt;Ndis802_11AuthModeOpen&lt;/b&gt;, &lt;b&gt;Ndis802_11AuthModeShared&lt;/b&gt; or &lt;b&gt;Ndis802_11AuthModeAutoSwitch&lt;/b&gt; (&lt;a href="http://msdn2.microsoft.com/en-us/library/ms799406.aspx"&gt;OID_802_11_AUTHENTICATION_MODE&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;Set encryption mode to &lt;b&gt;Ndis802_11Encryption1Enabled&lt;/b&gt; (&lt;a href="http://msdn2.microsoft.com/en-us/library/ms799412.aspx"&gt;OID_802_11_ENCRYPTION_STATUS&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;Set the service set identifier (SSID) to associate with (&lt;a href="http://msdn2.microsoft.com/en-us/library/ms799388.aspx"&gt;OID_802_11_SSID&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Optional:&lt;/b&gt; If you want to connect to a specific access point, set the media access control (MAC) address of the access point (&lt;a href="http://msdn2.microsoft.com/en-us/library/ms799396.aspx"&gt;OID_802_11_BSSID&lt;/a&gt;).
  &lt;li&gt;Wait for the &lt;b&gt;NDISUIO_NOTIFICATION_MEDIA_CONNECT&lt;/b&gt; event (&lt;a href="http://msdn2.microsoft.com/en-us/library/ms898830.aspx"&gt;IOCTL_NDISUIO_REQUEST_NOTIFICATION&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;

&lt;p&gt;
If &amp;quot;Using DHCP&amp;quot; is chosen for the wireless network adapter you have also to renew the IP address.
&lt;/p&gt;

&lt;p&gt;
I have written a console application that will show how to connect to an WEP encrypted access point using NDISUIO and a small console application to renew the IP address:
&lt;ul&gt;
  &lt;li&gt;&lt;a href="http://homepage.uibk.ac.at/~csaf3425/wepwirelessnet.zip"&gt;wepwirelessnet.zip&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://homepage.uibk.ac.at/~csaf3425/dhcp.zip"&gt;dhcp.zip&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;img alt="" src="http://geekswithblogs.net/images/geekswithblogs_net/dastblog/5989/o_wepwirelessnet.gif"&gt;
&lt;img alt="" src="http://geekswithblogs.net/images/geekswithblogs_net/dastblog/5989/o_wifiadapterinfo.gif"&gt;
&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=102516"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=102516" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/dastblog/aggbug/102516.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Daniel Strigl</dc:creator>
            <guid>http://geekswithblogs.net/dastblog/archive/2007/01/02/102516.aspx</guid>
            <pubDate>Tue, 02 Jan 2007 21:23:00 GMT</pubDate>
            <comments>http://geekswithblogs.net/dastblog/archive/2007/01/02/102516.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/dastblog/comments/commentRss/102516.aspx</wfw:commentRss>
        </item>
        <item>
            <title>How to get supported authentication and encryption capabilities of an wireless adapter?</title>
            <link>http://geekswithblogs.net/dastblog/archive/2006/12/26/102080.aspx</link>
            <description>&lt;p&gt;
The following sample application, written in C++, will show how to do it:
&lt;/p&gt;

&lt;textarea language="cpp" name="code2006122601"&gt;
// capability.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include &lt;windows.h&gt;
#include &lt;commctrl.h&gt;
#include &lt;ntddndis.h&gt;
#include &lt;nuiouser.h&gt;
#include &lt;winioctl.h&gt;

#define OID_802_11_CAPABILITY 0x0d010122

typedef enum 
{
    Ndis802_11AuthModeWPA2 = Ndis802_11AuthModeWPANone + 1,
    Ndis802_11AuthModeWPA2PSK,
};

typedef struct _NDIS_802_11_AUTHENTICATION_ENCRYPTION 
{
    NDIS_802_11_AUTHENTICATION_MODE AuthModeSupported;
    NDIS_802_11_ENCRYPTION_STATUS EncryptStatusSupported;
} NDIS_802_11_AUTHENTICATION_ENCRYPTION, 
 *PNDIS_802_11_AUTHENTICATION_ENCRYPTION;

typedef struct _NDIS_802_11_CAPABILITY 
{
    ULONG Length;
    ULONG Version;
    ULONG NoOfPMKIDs;
    ULONG NoOfAuthEncryptPairSupported;
    NDIS_802_11_AUTHENTICATION_ENCRYPTION
        AuthenticationEncryptionSupported[1];
} NDIS_802_11_CAPABILITY, *PNDIS_802_11_CAPABILITY;

int _tmain(int argc, _TCHAR* argv[])
{
    if (argc &lt; 2)
    {
        printf("Usage: capability &lt;adapter name&gt;\n");
        printf("       &lt;adapter name&gt; name of the wireless adapter\n");
        return -1;
    }

    LPCTSTR pszAdapter = argv[1];

    HANDLE hDevice = CreateFile(
        NDISUIO_DEVICE_NAME, GENERIC_READ, 
        FILE_SHARE_READ | FILE_SHARE_WRITE, 
        NULL, OPEN_EXISTING, 
        FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
        NULL);

    if (hDevice == INVALID_HANDLE_VALUE)
    {
        DWORD dwError = GetLastError();

        printf("Function \"CreateFile\" failed (0x%08x).\n", dwError);
        return -2;
    }

    DWORD dwBytesReturned = 0;

    BYTE buf[512];
    PNDISUIO_QUERY_OID pNDISUIOQueryOid = (PNDISUIO_QUERY_OID) buf;
    pNDISUIOQueryOid-&gt;ptcDeviceName = (PTCHAR) pszAdapter;
    pNDISUIOQueryOid-&gt;Oid = OID_802_11_CAPABILITY;

    if (!DeviceIoControl(
        hDevice, IOCTL_NDISUIO_QUERY_OID_VALUE, 
        pNDISUIOQueryOid, sizeof(buf), 
        pNDISUIOQueryOid, sizeof(buf), 
        &amp;dwBytesReturned, NULL))
    {
        DWORD dwError = GetLastError();

        CloseHandle(hDevice);
        printf("Function \"DeviceIoControl\" (OID_802_11_CAPABILITY) failed (0x%08x).\n", 
            dwError);
        return -3;
    }

    PNDIS_802_11_CAPABILITY pCap = (PNDIS_802_11_CAPABILITY) pNDISUIOQueryOid-&gt;Data;

    if (pCap-&gt;Version != 2) 
    {
        CloseHandle(hDevice);
        printf("Unsupported OID_802_11_CAPABILITY data (ver %d).\n", pCap-&gt;Version);
        return -4;
    }

    for (ULONG i = 0; i &lt; pCap-&gt;NoOfAuthEncryptPairSupported; ++i)
    {
        NDIS_802_11_AUTHENTICATION_MODE authMode = 
            pCap-&gt;AuthenticationEncryptionSupported[i].AuthModeSupported;
        NDIS_802_11_ENCRYPTION_STATUS encStat = 
            pCap-&gt;AuthenticationEncryptionSupported[i].EncryptStatusSupported;

        if (authMode == Ndis802_11AuthModeOpen &amp;&amp; 
            encStat == Ndis802_11EncryptionDisabled)
        {
            printf("Open System: none\n");
        }
        else if (authMode == Ndis802_11AuthModeOpen &amp;&amp; 
                 encStat == Ndis802_11Encryption1Enabled)
        {
            printf("Open System: WEP\n");
        }
        else if (authMode == Ndis802_11AuthModeShared &amp;&amp; 
                 encStat == Ndis802_11EncryptionDisabled)
        {
            printf("Shared Key: none\n");
        }
        else if (authMode == Ndis802_11AuthModeShared &amp;&amp; 
                 encStat == Ndis802_11Encryption1Enabled)
        {
            printf("Shared Key: WEP\n");
        }
        else if (authMode == Ndis802_11AuthModeWPA &amp;&amp; 
                 encStat == Ndis802_11Encryption2Enabled)
        {
            printf("WPA: TKIP\n");
        }
        else if (authMode == Ndis802_11AuthModeWPA &amp;&amp; 
                 encStat == Ndis802_11Encryption3Enabled)
        {
            printf("WPA: AES\n");
        }
        else if (authMode == Ndis802_11AuthModeWPAPSK &amp;&amp; 
                 encStat == Ndis802_11Encryption2Enabled)
        {
            printf("WPA-PSK: TKIP\n");
        }
        else if (authMode == Ndis802_11AuthModeWPAPSK &amp;&amp; 
                 encStat == Ndis802_11Encryption3Enabled)
        {
            printf("WPA-PSK: AES\n");
        }
        else if (authMode == Ndis802_11AuthModeWPANone &amp;&amp; 
                 encStat == Ndis802_11EncryptionDisabled)
        {
            printf("WPA-None: none\n");
        }
        else if (authMode == Ndis802_11AuthModeWPANone &amp;&amp; 
                 encStat == Ndis802_11Encryption2Enabled)
        {
            printf("WPA-None: TKIP\n");
        }
        else if (authMode == Ndis802_11AuthModeWPANone &amp;&amp; 
                 encStat == Ndis802_11Encryption3Enabled)
        {
            printf("WPA-None: AES\n");
        }
        else if (authMode == Ndis802_11AuthModeWPA2 &amp;&amp; 
                 encStat == Ndis802_11Encryption2Enabled)
        {
            printf("WPA2: TKIP\n");
        }
        else if (authMode == Ndis802_11AuthModeWPA2 &amp;&amp; 
                 encStat == Ndis802_11Encryption3Enabled)
        {
            printf("WPA2: AES\n");
        }
        else if (authMode == Ndis802_11AuthModeWPA2PSK &amp;&amp; 
                 encStat == Ndis802_11Encryption2Enabled)
        {
            printf("WPA-PSK2: TKIP\n");
        }
        else if (authMode == Ndis802_11AuthModeWPA2PSK &amp;&amp; 
                 encStat == Ndis802_11Encryption3Enabled)
        {
            printf("WPA-PSK2: AES\n");
        }
        else
        {
            printf("&lt;unknown&gt; (auth = %d, encr = %d)\n", 
                authMode, encStat);
        }
    }

    CloseHandle(hDevice);

    return 0;
}
&lt;/textarea&gt;

&lt;p&gt;
The following image shows the supported authentication and encryption capabilities of our HP iPAQ hx2490b:
&lt;/p&gt;

&lt;p&gt;
&lt;img alt="" src="http://geekswithblogs.net/images/geekswithblogs_net/dastblog/5978/o_capability.gif"&gt;
&lt;/p&gt;

&lt;SCRIPT language="javascript" src="http://homepage.uibk.ac.at/~csaf3425/scripts/SyntaxHighlighter/shCore.js"&gt;&lt;/SCRIPT&gt;
&lt;SCRIPT language="javascript" src="http://homepage.uibk.ac.at/~csaf3425/scripts/SyntaxHighlighter/shBrushCpp.js"&gt;&lt;/SCRIPT&gt;
&lt;SCRIPT language="javascript"&gt;
    dp.SyntaxHighlighter.HighlightAll('code2006122601', true, true);
&lt;/SCRIPT&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=102080"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=102080" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/dastblog/aggbug/102080.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Daniel Strigl</dc:creator>
            <guid>http://geekswithblogs.net/dastblog/archive/2006/12/26/102080.aspx</guid>
            <pubDate>Wed, 27 Dec 2006 02:52:00 GMT</pubDate>
            <comments>http://geekswithblogs.net/dastblog/archive/2006/12/26/102080.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/dastblog/comments/commentRss/102080.aspx</wfw:commentRss>
        </item>
        <item>
            <title>How to connect to an open access point using NDISUIO?</title>
            <link>http://geekswithblogs.net/dastblog/archive/2006/12/23/101954.aspx</link>
            <description>&lt;p&gt;
The steps to connect to an open access point without any encryption using NDISUIO are (see also &lt;a href="http://msdn2.microsoft.com/en-us/library/aa504146.aspx"&gt;802.11 Network Association&lt;/a&gt;):
&lt;ul&gt;
  &lt;li&gt;Disassociate from the current service set (&lt;a href="http://msdn2.microsoft.com/en-us/library/ms799389.aspx"&gt;OID_802_11_DISASSOCIATE&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;Set network mode to &lt;b&gt;Ndis802_11Infrastructure&lt;/b&gt; (&lt;a href="http://msdn2.microsoft.com/en-us/library/ms799395.aspx"&gt;OID_802_11_INFRASTRUCTURE_MODE&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;Set privacy filter mode to &lt;b&gt;Ndis802_11PrivFilterAcceptAll&lt;/b&gt; (&lt;a href="http://msdn2.microsoft.com/en-us/library/ms799387.aspx"&gt;OID_802_11_PRIVACY_FILTER&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;Set authentication mode to &lt;b&gt;Ndis802_11AuthModeOpen&lt;/b&gt; (&lt;a href="http://msdn2.microsoft.com/en-us/library/ms799406.aspx"&gt;OID_802_11_AUTHENTICATION_MODE&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;Set encryption mode to &lt;b&gt;Ndis802_11EncryptionDisabled&lt;/b&gt; (&lt;a href="http://msdn2.microsoft.com/en-us/library/ms799412.aspx"&gt;OID_802_11_ENCRYPTION_STATUS&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;Set the service set identifier (SSID) to associate with (&lt;a href="http://msdn2.microsoft.com/en-us/library/ms799388.aspx"&gt;OID_802_11_SSID&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Optional:&lt;/b&gt; If you want to connect to a specific access point, set the media access control (MAC) address of the access point (&lt;a href="http://msdn2.microsoft.com/en-us/library/ms799396.aspx"&gt;OID_802_11_BSSID&lt;/a&gt;).
  &lt;li&gt;Wait for the &lt;b&gt;NDISUIO_NOTIFICATION_MEDIA_CONNECT&lt;/b&gt; event (&lt;a href="http://msdn2.microsoft.com/en-us/library/ms898830.aspx"&gt;IOCTL_NDISUIO_REQUEST_NOTIFICATION&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;

&lt;p&gt;
If &amp;quot;Using DHCP&amp;quot; is chosen for the wireless network adapter you have also to renew the IP address.
&lt;/p&gt;

&lt;p&gt;
I have written a console application that will show how to connect to an open access point using NDISUIO and a small console application to renew the IP address:
&lt;ul&gt;
  &lt;li&gt;&lt;a href="http://homepage.uibk.ac.at/~csaf3425/openwirelessnet.zip"&gt;openwirelessnet.zip&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://homepage.uibk.ac.at/~csaf3425/dhcp.zip"&gt;dhcp.zip&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;img alt="" src="http://geekswithblogs.net/images/geekswithblogs_net/dastblog/5966/o_openwirelessnet.gif"&gt;
&lt;img alt="" src="http://geekswithblogs.net/images/geekswithblogs_net/dastblog/5966/o_wifiadapterinfo.gif"&gt;
&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=101954"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=101954" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/dastblog/aggbug/101954.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Daniel Strigl</dc:creator>
            <guid>http://geekswithblogs.net/dastblog/archive/2006/12/23/101954.aspx</guid>
            <pubDate>Sat, 23 Dec 2006 21:40:00 GMT</pubDate>
            <comments>http://geekswithblogs.net/dastblog/archive/2006/12/23/101954.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/dastblog/comments/commentRss/101954.aspx</wfw:commentRss>
        </item>
        <item>
            <title>How to scan for wireless access points on a Pocket PC?</title>
            <link>http://geekswithblogs.net/dastblog/archive/2006/11/30/100038.aspx</link>
            <description>&lt;p&gt;
I have also written a little Win32 console application in C++ that will show how to do it, to run it you have 
to install the &lt;a title="" href="http://www.symbolictools.de/public/pocketconsole/index.htm"&gt;PocketConsole&lt;/a&gt; from 
&lt;a title="" href="http://www.symbolictools.de"&gt;SymbolicTools&lt;/a&gt;:
&lt;/p&gt;

&lt;textarea language="cpp" name="code2006113001"&gt;
// accesspoints.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include &lt;windows.h&gt;
#include &lt;commctrl.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;ntddndis.h&gt;
#include &lt;nuiouser.h&gt;
#include &lt;winioctl.h&gt;
#include "strconv.h"

int _tmain(int argc, _TCHAR* argv[])
{
    if (argc &lt; 2)
    {
        printf("Usage: accesspoints &lt;adapter name&gt; [delay in ms]\n");
        printf("       &lt;adapter name&gt; name of the wireless adapter\n");
        printf("       [delay in ms]  delay between scan and list query\n");
        return -1;
    }

    LPCTSTR pszAdapter = argv[1];

    HANDLE hDevice = CreateFile(
        NDISUIO_DEVICE_NAME, GENERIC_READ, 
        FILE_SHARE_READ | FILE_SHARE_WRITE, 
        NULL, OPEN_EXISTING, 
        FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
        NULL);

    if (hDevice == INVALID_HANDLE_VALUE)
    {
        DWORD dwError = GetLastError();

        printf("Function \"CreateFile\" failed (0x%08x).\n", dwError);
        return -2;
    }

    DWORD dwBytesReturned = 0;

    NDISUIO_QUERY_OID NDISUIOQueryOid = {0};
    NDISUIOQueryOid.ptcDeviceName = (PTCHAR) pszAdapter;
    NDISUIOQueryOid.Oid = OID_GEN_PHYSICAL_MEDIUM;

    if (!DeviceIoControl(
        hDevice, IOCTL_NDISUIO_QUERY_OID_VALUE,
        &amp;NDISUIOQueryOid, sizeof(NDISUIOQueryOid),
        &amp;NDISUIOQueryOid, sizeof(NDISUIOQueryOid),
        &amp;dwBytesReturned, NULL))
    {
        DWORD dwError = GetLastError();

        CloseHandle(hDevice);
        printf("Function \"DeviceIoControl\" (OID_GEN_PHYSICAL_MEDIUM) failed (0x%08x).\n", 
            dwError);
        return -3;
    }

    if (*((PNDIS_PHYSICAL_MEDIUM) NDISUIOQueryOid.Data) != NdisPhysicalMediumWirelessLan)
    {
        CloseHandle(hDevice);
        printf("Device \"%s\" is no wireless adapter.\n", CTtoA(pszAdapter));
        return -4;
    }

    CTtoW deviceName(pszAdapter);

	if (!DeviceIoControl(
        hDevice, IOCTL_NDISUIO_OPEN_DEVICE,
        (LPVOID)(LPCWSTR) deviceName,
        deviceName.GetLength() * sizeof(WCHAR),
        NULL, 0, &amp;dwBytesReturned, NULL))
    {
        DWORD dwError = GetLastError();

        CloseHandle(hDevice);
        printf("Function \"DeviceIoControl\" (IOCTL_NDISUIO_OPEN_DEVICE) failed (0x%08x).\n", 
            dwError);
        return -5;
    }

    NDISUIO_SET_OID NDISUIOSetOid = {0};  
    NDISUIOSetOid.ptcDeviceName = (PTCHAR) pszAdapter;  
    NDISUIOSetOid.Oid = OID_802_11_BSSID_LIST_SCAN;  

    if (!DeviceIoControl(  
        hDevice, IOCTL_NDISUIO_SET_OID_VALUE,   
        &amp;NDISUIOSetOid, sizeof(NDISUIOSetOid),   
        NULL, 0,   
        &amp;dwBytesReturned, NULL))  
    {  
        DWORD dwError = GetLastError();  
  
        CloseHandle(hDevice);  
        printf("Function \"DeviceIoControl\" (OID_802_11_BSSID_LIST_SCAN) failed (0x%08x).\n",   
            dwError);  
        return -6;  
    }  

    if (argc &gt;= 3)
    {
        Sleep((DWORD)_ttoi(argv[2]));
    }

    for (int i = 1;; ++i)
    {
        const DWORD queryMemSize = sizeof(NDISUIO_QUERY_OID) + sizeof(NDIS_WLAN_BSSID_EX) * i;
        PNDISUIO_QUERY_OID pNDISUIOQueryOid = (PNDISUIO_QUERY_OID) malloc(queryMemSize);

        pNDISUIOQueryOid-&gt;ptcDeviceName = (PTCHAR) pszAdapter;
        pNDISUIOQueryOid-&gt;Oid = OID_802_11_BSSID_LIST;

        if (!DeviceIoControl(
            hDevice, IOCTL_NDISUIO_QUERY_OID_VALUE, 
            pNDISUIOQueryOid, queryMemSize, 
            pNDISUIOQueryOid, queryMemSize, 
            &amp;dwBytesReturned, NULL))
        {
            DWORD dwError = GetLastError();

            free(pNDISUIOQueryOid);

            if (dwError == ERROR_INVALID_USER_BUFFER ||
                dwError == ERROR_INSUFFICIENT_BUFFER)
                continue;

            CloseHandle(hDevice);
            printf("Function \"DeviceIoControl\" (OID_802_11_BSSID_LIST) failed (0x%08x).\n", 
                dwError);
            return -7;
        }

        PNDIS_802_11_BSSID_LIST_EX pBssidList = (PNDIS_802_11_BSSID_LIST_EX) pNDISUIOQueryOid-&gt;Data;

        const int accessPointsCnt = (int) pBssidList-&gt;NumberOfItems;

        printf("Found %d access point(s).\n", accessPointsCnt);

        PNDIS_WLAN_BSSID_EX pBssid = pBssidList-&gt;Bssid;

        for (int j = 0; j &lt; accessPointsCnt; ++j)
        {
            printf("\n");

            printf("MacAddress        : %02X-%02X-%02X-%02X-%02X-%02X\n",
                pBssid-&gt;MacAddress[0], pBssid-&gt;MacAddress[1],
                pBssid-&gt;MacAddress[2], pBssid-&gt;MacAddress[3],
                pBssid-&gt;MacAddress[4], pBssid-&gt;MacAddress[5]);

            char* pSSID = (char*) malloc(pBssid-&gt;Ssid.SsidLength + 1);
            memcpy(pSSID, pBssid-&gt;Ssid.Ssid, pBssid-&gt;Ssid.SsidLength);
            pSSID[pBssid-&gt;Ssid.SsidLength] = '\0';
            printf("Ssid              : %s\n", pSSID);
            free(pSSID);

            printf("Privacy           : %s\n", pBssid-&gt;Privacy ? "Yes" : "No");
            printf("Rssi              : %ld dBm\n", pBssid-&gt;Rssi);
            printf("NetworkTypeInUse  : %s\n", 
                pBssid-&gt;NetworkTypeInUse == Ndis802_11FH ? "Ndis802_11FH" : 
                pBssid-&gt;NetworkTypeInUse == Ndis802_11DS ? "Ndis802_11DS" :
                "&lt;unknown&gt;");
            printf("BeaconPeriod      : %lu Kusec\n", pBssid-&gt;Configuration.BeaconPeriod);
            printf("ATIMWindow        : %lu Kusec\n", pBssid-&gt;Configuration.ATIMWindow);

            if (pBssid-&gt;NetworkTypeInUse == Ndis802_11DS)
            {
                printf("DSConfig          : %lu kHz\n", pBssid-&gt;Configuration.DSConfig);
            }
            else if (pBssid-&gt;NetworkTypeInUse == Ndis802_11FH)
            {
                printf("HopPattern        : %lu\n", pBssid-&gt;Configuration.FHConfig.HopPattern);
                printf("HopSet            : %lu\n", pBssid-&gt;Configuration.FHConfig.HopSet);
                printf("DwellTime         : %lu Kusec\n", pBssid-&gt;Configuration.FHConfig.DwellTime);
            }

            printf("InfrastructureMode: %s\n",
                pBssid-&gt;InfrastructureMode == Ndis802_11IBSS ? "Ndis802_11IBSS" :
                pBssid-&gt;InfrastructureMode == Ndis802_11Infrastructure ? "Ndis802_11Infrastructure" :
                pBssid-&gt;InfrastructureMode == Ndis802_11AutoUnknown ? "Ndis802_11AutoUnknown" :
                "&lt;unknown&gt;");

            printf("SupportedRates    : [0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x]\n",
                pBssid-&gt;SupportedRates[0], pBssid-&gt;SupportedRates[1], pBssid-&gt;SupportedRates[2], 
                pBssid-&gt;SupportedRates[3], pBssid-&gt;SupportedRates[4], pBssid-&gt;SupportedRates[5], 
                pBssid-&gt;SupportedRates[6], pBssid-&gt;SupportedRates[7]);   

            printf("                    BSSBasicRateSet (Mbps):");
            for (int n = 0; n &lt; 8; ++n)
            {
                if (pBssid-&gt;SupportedRates[n] &amp; 0x80)
                    printf(" %.1f", (pBssid-&gt;SupportedRates[n] &amp; 0x7f) * 0.5f);
            }
            printf("\n");

            printf("                    Others (Mbps):");
            for (int n = 0; n &lt; 8; ++n)
            {
                if (!(pBssid-&gt;SupportedRates[n] &amp; 0x80))
                    printf(" %.1f", (pBssid-&gt;SupportedRates[n] &amp; 0x7f) * 0.5f);
            }
            printf("\n");

            if (pBssid-&gt;Length &gt;= sizeof(NDIS_802_11_BSSID_LIST_EX) &amp;&amp; pBssid-&gt;IELength &gt; 0)
            {
                printf("IEs               : [");
                for (ULONG n = 0; n &lt; pBssid-&gt;IELength; ++n)
                {
                    printf("0x%02x", pBssid-&gt;IEs[n]);
                    if (n &lt; pBssid-&gt;IELength - 1)
                        printf(", ");
                }
                printf("]\n");
            }
            
            pBssid = (PNDIS_WLAN_BSSID_EX) ((LPBYTE) pBssid + pBssid-&gt;Length);
        }

        free(pNDISUIOQueryOid);

        CloseHandle(hDevice);

        return accessPointsCnt;
    }
}
&lt;/textarea&gt;

&lt;p&gt;
The following image shows the output of the application running on our HP iPAQ hx2490b:
&lt;/p&gt;

&lt;p&gt;
&lt;img alt="" src="http://geekswithblogs.net/images/geekswithblogs_net/dastblog/5831/o_accesspoints.gif"&gt;
&lt;/p&gt;

&lt;SCRIPT language="javascript" src="http://homepage.uibk.ac.at/~csaf3425/scripts/SyntaxHighlighter/shCore.js"&gt;&lt;/SCRIPT&gt;
&lt;SCRIPT language="javascript" src="http://homepage.uibk.ac.at/~csaf3425/scripts/SyntaxHighlighter/shBrushCpp.js"&gt;&lt;/SCRIPT&gt;
&lt;SCRIPT language="javascript"&gt;
    dp.SyntaxHighlighter.HighlightAll('code2006113001', true, true);
&lt;/SCRIPT&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=100038"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=100038" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/dastblog/aggbug/100038.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Daniel Strigl</dc:creator>
            <guid>http://geekswithblogs.net/dastblog/archive/2006/11/30/100038.aspx</guid>
            <pubDate>Thu, 30 Nov 2006 23:31:00 GMT</pubDate>
            <comments>http://geekswithblogs.net/dastblog/archive/2006/11/30/100038.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/dastblog/comments/commentRss/100038.aspx</wfw:commentRss>
        </item>
        <item>
            <title>How to list installed network adapters on a Pocket PC and detect if they are wireless?</title>
            <link>http://geekswithblogs.net/dastblog/archive/2006/11/24/98747.aspx</link>
            <description>&lt;p&gt;
I have written a little Win32 console application in C++ that will show how to do it, to run it you have 
to install the &lt;a title="" href="http://www.symbolictools.de/public/pocketconsole/index.htm"&gt;PocketConsole&lt;/a&gt; from 
&lt;a title="" href="http://www.symbolictools.de"&gt;SymbolicTools&lt;/a&gt;:
&lt;/p&gt;

&lt;textarea language="cpp" name="code2006112403"&gt;
// adapters.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include &lt;windows.h&gt;
#include &lt;commctrl.h&gt;
#include &lt;iphlpapi.h&gt;
#include &lt;time.h&gt;
#include &lt;ntddndis.h&gt;
#include &lt;nuiouser.h&gt;
#include &lt;winioctl.h&gt;
#include "strconv.h"

/*
 * Windows CE does not have a localtime() function, so create a substitute.
 * See SQLite WinCE Port [http://sourceforge.net/projects/sqlite-wince/].
 */
struct tm* localtime(const time_t* t)
{
    static struct tm y;
    FILETIME uTm, lTm;
    SYSTEMTIME pTm;
    __int64 t64;
    t64 = *t;
    t64 = (t64 + 11644473600) * 10000000;
    uTm.dwLowDateTime = (DWORD)(t64 &amp; 0xFFFFFFFF);
    uTm.dwHighDateTime= (DWORD)(t64 &gt;&gt; 32);
    FileTimeToLocalFileTime(&amp;uTm, &amp;lTm);
    FileTimeToSystemTime(&amp;lTm, &amp;pTm);
    y.tm_year = pTm.wYear - 1900;
    y.tm_mon = pTm.wMonth - 1;
    y.tm_wday = pTm.wDayOfWeek;
    y.tm_mday = pTm.wDay;
    y.tm_hour = pTm.wHour;
    y.tm_min = pTm.wMinute;
    y.tm_sec = pTm.wSecond;
    return &amp;y;
}

BOOL IsWireless(LPCTSTR pszAdapter, LPBOOL pbIsWireless)
{
    HANDLE hDevice = CreateFile(
        NDISUIO_DEVICE_NAME, GENERIC_READ, 
        FILE_SHARE_READ | FILE_SHARE_WRITE, 
        NULL, OPEN_EXISTING, 
        FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
        NULL);

    if (hDevice == INVALID_HANDLE_VALUE)
    {
        DWORD dwError = GetLastError();

        printf("Function \"CreateFile\" failed (0x%08x).\n", dwError);
        return FALSE;
    }

    DWORD dwBytesReturned = 0;
    NDISUIO_QUERY_OID NDISUIOQueryOid;
    NDISUIOQueryOid.ptcDeviceName = (PTCHAR) pszAdapter;
    NDISUIOQueryOid.Oid = OID_802_11_WEP_STATUS;

    *pbIsWireless = DeviceIoControl(
        hDevice, IOCTL_NDISUIO_QUERY_OID_VALUE, 
        &amp;NDISUIOQueryOid, sizeof(NDISUIOQueryOid), 
        &amp;NDISUIOQueryOid, sizeof(NDISUIOQueryOid), 
        &amp;dwBytesReturned, NULL);

    CloseHandle(hDevice);

    return TRUE;
}

int _tmain(int argc, _TCHAR* argv[])
{
    DWORD dwRetVal;
    ULONG ulOutBufLen = 0;

    if ((dwRetVal = GetAdaptersInfo(NULL, &amp;ulOutBufLen)) != ERROR_BUFFER_OVERFLOW)
    {
        if (dwRetVal == ERROR_NO_DATA)
            printf("No adapter information exists for the local computer.\n");
        else
            printf("Function \"GetAdaptersInfo\" failed (0x%08x).\n", dwRetVal);

        return -1;
    }

    IP_ADAPTER_INFO* pAdapterInfo = (IP_ADAPTER_INFO*) malloc(ulOutBufLen);

    if ((dwRetVal = GetAdaptersInfo(pAdapterInfo, &amp;ulOutBufLen)) != ERROR_SUCCESS)
    {
        free(pAdapterInfo);

        if (dwRetVal == ERROR_NO_DATA)
            printf("No adapter information exists for the local computer.\n");
        else
            printf("Function \"GetAdaptersInfo\" failed (0x%08x).\n", dwRetVal);

        return -2;
    }

    while (pAdapterInfo != NULL)
    {
        printf("Adapter Name    : %s\n", pAdapterInfo-&gt;AdapterName);
        printf("Description     : %s\n", pAdapterInfo-&gt;Description);
        printf("MAC Address     : %02X-%02X-%02X-%02X-%02X-%02X\n",
            pAdapterInfo-&gt;Address[0], pAdapterInfo-&gt;Address[1],
            pAdapterInfo-&gt;Address[2], pAdapterInfo-&gt;Address[3],
            pAdapterInfo-&gt;Address[4], pAdapterInfo-&gt;Address[5]);
        printf("IP Address      : %s\n", 
            pAdapterInfo-&gt;IpAddressList.IpAddress.String);
        printf("Subnet Mask     : %s\n", 
            pAdapterInfo-&gt;IpAddressList.IpMask.String);
        printf("Gateway         : %s\n", 
            pAdapterInfo-&gt;GatewayList.IpAddress.String);

        BOOL bIsWireless;
        printf("Is Wireless     : %s\n",
            IsWireless(CAtoT(pAdapterInfo-&gt;AdapterName), &amp;bIsWireless) ? 
            bIsWireless ? "Yes" : "No" : "&lt;unknown&gt;");

        if (pAdapterInfo-&gt;DhcpEnabled) 
        {
            printf("DHCP Enabled    : Yes\n");
            printf("DHCP Server     : %s\n", 
                pAdapterInfo-&gt;DhcpServer.IpAddress.String);

            struct tm* t = localtime(&amp;(pAdapterInfo-&gt;LeaseObtained));
            printf("Lease Obtained  : %02d.%02d.%04d %02d:%02d:%02d\n", 
                t-&gt;tm_mday, t-&gt;tm_mon + 1, t-&gt;tm_year + 1900,
                t-&gt;tm_hour, t-&gt;tm_min, t-&gt;tm_sec);

            t = localtime(&amp;(pAdapterInfo-&gt;LeaseExpires));
            printf("Lease Expires   : %02d.%02d.%04d %02d:%02d:%02d\n", 
                t-&gt;tm_mday, t-&gt;tm_mon + 1, t-&gt;tm_year + 1900,
                t-&gt;tm_hour, t-&gt;tm_min, t-&gt;tm_sec);
        }
        else
        {
            printf("DHCP Enabled    : No\n");
        }
    
        if (pAdapterInfo-&gt;HaveWins) 
        {
            printf("Have WINS       : Yes\n");
            printf("Pri. WINS Server: %s\n", 
                pAdapterInfo-&gt;PrimaryWinsServer.IpAddress.String);
            printf("Sec. WINS Server: %s\n", 
                pAdapterInfo-&gt;SecondaryWinsServer.IpAddress.String);
        }
        else
        {
            printf("Have WINS       : No\n");
        }

        if (pAdapterInfo-&gt;Next != NULL)
            printf("\n");

        pAdapterInfo = pAdapterInfo-&gt;Next;
    }

    free(pAdapterInfo);

    return 0;
}
&lt;/textarea&gt;

&lt;p&gt;
The following image shows the output of the application running on our HP iPAQ hx2490b:
&lt;/p&gt;

&lt;p&gt;
&lt;img alt="" src="http://geekswithblogs.net/images/geekswithblogs_net/dastblog/5808/o_adapters.gif"&gt;
&lt;/p&gt;

&lt;SCRIPT language="javascript" src="http://homepage.uibk.ac.at/~csaf3425/scripts/SyntaxHighlighter/shCore.js"&gt;&lt;/SCRIPT&gt;
&lt;SCRIPT language="javascript" src="http://homepage.uibk.ac.at/~csaf3425/scripts/SyntaxHighlighter/shBrushCpp.js"&gt;&lt;/SCRIPT&gt;
&lt;SCRIPT language="javascript"&gt;
    dp.SyntaxHighlighter.HighlightAll('code2006112403', true, true);
&lt;/SCRIPT&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=98747"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=98747" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/dastblog/aggbug/98747.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Daniel Strigl</dc:creator>
            <guid>http://geekswithblogs.net/dastblog/archive/2006/11/24/98747.aspx</guid>
            <pubDate>Fri, 24 Nov 2006 23:02:00 GMT</pubDate>
            <comments>http://geekswithblogs.net/dastblog/archive/2006/11/24/98747.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/dastblog/comments/commentRss/98747.aspx</wfw:commentRss>
        </item>
        <item>
            <title>String conversion between ANSI and Unicode</title>
            <link>http://geekswithblogs.net/dastblog/archive/2006/11/24/98746.aspx</link>
            <description>&lt;p&gt;For a simple string conversion between ANSI and Unicode on a Pocket PC I have written some C++ classes:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;CTtoA&lt;/strong&gt; for conversion from LPCTSTR to LPCSTR&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;CTtoW&lt;/strong&gt; for conversion from LPCTSTR to LPCWSTR&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;CAtoT&lt;/strong&gt; for conversion from LPCSTR to LPCTSTR&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;CWtoT&lt;/strong&gt; for conversion from LPCWSTR to LPCTSTR&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;CAtoW&lt;/strong&gt; for conversion from LPCSTR to LPCWSTR&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;CWtoA&lt;/strong&gt; for conversion from LPCWSTR to LPCSTR&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;strconv.h&lt;/h2&gt;

&lt;table bgcolor="#dddddd" border="1" cellpadding="5" cellspacing="0" width="100%"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: #dddddd;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;    1&lt;/span&gt; &lt;span style="color: green;"&gt;//////////////////////////////////////////////////////////////////////////&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;    2&lt;/span&gt; &lt;span style="color: green;"&gt;//&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;    3&lt;/span&gt; &lt;span style="color: green;"&gt;//  strconv.h - Some useful classes for string conversion.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;    4&lt;/span&gt; &lt;span style="color: green;"&gt;//&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;    5&lt;/span&gt; &lt;span style="color: green;"&gt;//  Copyright (c) 2004-2007 by Daniel Strigl.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;    6&lt;/span&gt; &lt;span style="color: green;"&gt;//&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;    7&lt;/span&gt; &lt;span style="color: green;"&gt;//  This code may be used in compiled form in any way you desire. &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;    8&lt;/span&gt; &lt;span style="color: green;"&gt;//  This file may be redistributed unmodified by any means PROVIDING &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;    9&lt;/span&gt; &lt;span style="color: green;"&gt;//  it is not sold for profit without the authors written consent, &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   10&lt;/span&gt; &lt;span style="color: green;"&gt;//  and providing that this notice and the authors name is included. &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   11&lt;/span&gt; &lt;span style="color: green;"&gt;//  By the way, if the source code in this file is used in any &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   12&lt;/span&gt; &lt;span style="color: green;"&gt;//  application I would appreciate and enjoy hearing about them. &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   13&lt;/span&gt; &lt;span style="color: green;"&gt;//&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   14&lt;/span&gt; &lt;span style="color: green;"&gt;//  This file is provided "as is" with no expressed or implied warranty.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   15&lt;/span&gt; &lt;span style="color: green;"&gt;//  The author accepts no liability for any damage, in any form, caused&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   16&lt;/span&gt; &lt;span style="color: green;"&gt;//  by this code. Use it at your own risk and as with all code expect &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   17&lt;/span&gt; &lt;span style="color: green;"&gt;//  bugs! It's been tested, but I'm not perfect ;-)&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   18&lt;/span&gt; &lt;span style="color: green;"&gt;//&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   19&lt;/span&gt; &lt;span style="color: green;"&gt;//  Please use the contact page of my blog to report any &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   20&lt;/span&gt; &lt;span style="color: green;"&gt;//  bug, comment or suggestion.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   21&lt;/span&gt; &lt;span style="color: green;"&gt;//&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   22&lt;/span&gt; &lt;span style="color: green;"&gt;//  Contact:&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   23&lt;/span&gt; &lt;span style="color: green;"&gt;//  --------&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   24&lt;/span&gt; &lt;span style="color: green;"&gt;//&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   25&lt;/span&gt; &lt;span style="color: green;"&gt;//    Daniel Strigl [http://geekswithblogs.net/dastblog/]&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   26&lt;/span&gt; &lt;span style="color: green;"&gt;//&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   27&lt;/span&gt; &lt;span style="color: green;"&gt;//  History:&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   28&lt;/span&gt; &lt;span style="color: green;"&gt;//  --------&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   29&lt;/span&gt; &lt;span style="color: green;"&gt;//&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   30&lt;/span&gt; &lt;span style="color: green;"&gt;//    21 Jul 2004 - Initial version.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   31&lt;/span&gt; &lt;span style="color: green;"&gt;//    20 Nov 2006 - Added class CAtoT, CWtoT, CAtoW and CWtoA.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   32&lt;/span&gt; &lt;span style="color: green;"&gt;//&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   33&lt;/span&gt; &lt;span style="color: green;"&gt;//////////////////////////////////////////////////////////////////////////&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   34&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   35&lt;/span&gt; &lt;span style="color: blue;"&gt;#if&lt;/span&gt; !&lt;span style="color: blue;"&gt;defined&lt;/span&gt;(_STRCONV_H_)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   36&lt;/span&gt; &lt;span style="color: blue;"&gt;#define&lt;/span&gt; _STRCONV_H_&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   37&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   38&lt;/span&gt; &lt;span style="color: green;"&gt;//////////////////////////////////////////////////////////////////////////&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   39&lt;/span&gt; &lt;span style="color: green;"&gt;//&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   40&lt;/span&gt; &lt;span style="color: green;"&gt;//  CTtoA&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   41&lt;/span&gt; &lt;span style="color: green;"&gt;//&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   42&lt;/span&gt; &lt;span style="color: green;"&gt;//      LPCTSTR to LPCSTR conversion.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   43&lt;/span&gt; &lt;span style="color: green;"&gt;//&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   44&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; CTtoA&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   45&lt;/span&gt; {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   46&lt;/span&gt;     LPSTR m_psz;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   47&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   48&lt;/span&gt; &lt;span style="color: blue;"&gt;public&lt;/span&gt;:&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   49&lt;/span&gt;     CTtoA(LPCTSTR ptsz) : m_psz(NULL)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   50&lt;/span&gt;     {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   51&lt;/span&gt;         ASSERT(ptsz != NULL);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   52&lt;/span&gt; &lt;span style="color: blue;"&gt;#if&lt;/span&gt; &lt;span style="color: blue;"&gt;defined&lt;/span&gt;(_UNICODE) &lt;span style="color: green;"&gt;// for UNICODE build&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   53&lt;/span&gt;         &lt;span style="color: blue;"&gt;const&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; size = WideCharToMultiByte(CP_ACP, 0, ptsz, -1, &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   54&lt;/span&gt;             NULL, 0, NULL, NULL);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   55&lt;/span&gt; &lt;span style="color: blue;"&gt;#ifdef&lt;/span&gt; _DEBUG&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   56&lt;/span&gt;         &lt;span style="color: blue;"&gt;if&lt;/span&gt; (size == 0) {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   57&lt;/span&gt;             ASSERT(!_T(&lt;span style="color: #a31515;"&gt;"Function \"WideCharToMultiByte\" failed."&lt;/span&gt;));&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   58&lt;/span&gt;         }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   59&lt;/span&gt; &lt;span style="color: blue;"&gt;#endif&lt;/span&gt; &lt;span style="color: green;"&gt;// _DEBUG&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   60&lt;/span&gt;         ASSERT(size &amp;gt; 0);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   61&lt;/span&gt;         m_psz = (LPSTR) malloc(&lt;span style="color: blue;"&gt;sizeof&lt;/span&gt;(CHAR)*size);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   62&lt;/span&gt;         ASSERT(m_psz != NULL);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   63&lt;/span&gt; &lt;span style="color: blue;"&gt;#ifdef&lt;/span&gt; _DEBUG&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   64&lt;/span&gt;         memset(m_psz, 0, &lt;span style="color: blue;"&gt;sizeof&lt;/span&gt;(CHAR)*size);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   65&lt;/span&gt; &lt;span style="color: blue;"&gt;#endif&lt;/span&gt; &lt;span style="color: green;"&gt;// _DEBUG&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   66&lt;/span&gt;         VERIFY(WideCharToMultiByte(CP_ACP, 0, ptsz, -1, &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   67&lt;/span&gt;             m_psz, size, NULL, NULL) != 0);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   68&lt;/span&gt; &lt;span style="color: blue;"&gt;#else&lt;/span&gt; &lt;span style="color: green;"&gt;// for non-UNICODE build&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   69&lt;/span&gt;         m_psz = _strdup(ptsz);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   70&lt;/span&gt;         ASSERT(m_psz != NULL);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   71&lt;/span&gt; &lt;span style="color: blue;"&gt;#endif&lt;/span&gt; &lt;span style="color: green;"&gt;// defined(_UNICODE)&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   72&lt;/span&gt;     }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   73&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   74&lt;/span&gt;     CTtoA(&lt;span style="color: blue;"&gt;const&lt;/span&gt; CTtoA&amp;amp; rhs) : m_psz(_strdup(rhs.m_psz))&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   75&lt;/span&gt;     {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   76&lt;/span&gt;         ASSERT(m_psz != NULL);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   77&lt;/span&gt;     }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   78&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   79&lt;/span&gt;     CTtoA&amp;amp; &lt;span style="color: blue;"&gt;operator&lt;/span&gt;=(&lt;span style="color: blue;"&gt;const&lt;/span&gt; CTtoA&amp;amp; rhs)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   80&lt;/span&gt;     {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   81&lt;/span&gt;         &lt;span style="color: blue;"&gt;if&lt;/span&gt; (&lt;span style="color: blue;"&gt;this&lt;/span&gt; != &amp;amp;rhs)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   82&lt;/span&gt;         {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   83&lt;/span&gt;             free(m_psz);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   84&lt;/span&gt;             m_psz = _strdup(rhs.m_psz);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   85&lt;/span&gt;             ASSERT(m_psz != NULL);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   86&lt;/span&gt;         }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   87&lt;/span&gt;         &lt;span style="color: blue;"&gt;return&lt;/span&gt; *&lt;span style="color: blue;"&gt;this&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   88&lt;/span&gt;     }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   89&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   90&lt;/span&gt;     ~CTtoA()&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   91&lt;/span&gt;     {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   92&lt;/span&gt;         free(m_psz);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   93&lt;/span&gt;     }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   94&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   95&lt;/span&gt;     size_t GetLength() &lt;span style="color: blue;"&gt;const&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; strlen(m_psz); }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   96&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   97&lt;/span&gt;     &lt;span style="color: blue;"&gt;operator&lt;/span&gt; LPCSTR() &lt;span style="color: blue;"&gt;const&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; m_psz; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   98&lt;/span&gt; };&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   99&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  100&lt;/span&gt; &lt;span style="color: green;"&gt;//////////////////////////////////////////////////////////////////////////&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  101&lt;/span&gt; &lt;span style="color: green;"&gt;//&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  102&lt;/span&gt; &lt;span style="color: green;"&gt;//  CTtoW&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  103&lt;/span&gt; &lt;span style="color: green;"&gt;//&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  104&lt;/span&gt; &lt;span style="color: green;"&gt;//      LPCTSTR to LPCWSTR conversion.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  105&lt;/span&gt; &lt;span style="color: green;"&gt;//&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  106&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; CTtoW&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  107&lt;/span&gt; {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  108&lt;/span&gt;     LPWSTR m_pwsz;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  109&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  110&lt;/span&gt; &lt;span style="color: blue;"&gt;public&lt;/span&gt;:&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  111&lt;/span&gt;     CTtoW(LPCTSTR ptsz) : m_pwsz(NULL)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  112&lt;/span&gt;     {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  113&lt;/span&gt;         ASSERT(ptsz != NULL);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  114&lt;/span&gt; &lt;span style="color: blue;"&gt;#if&lt;/span&gt; &lt;span style="color: blue;"&gt;defined&lt;/span&gt;(_UNICODE) &lt;span style="color: green;"&gt;// for UNICODE build&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  115&lt;/span&gt;         m_pwsz = _wcsdup(ptsz);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  116&lt;/span&gt;         ASSERT(m_pwsz != NULL);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  117&lt;/span&gt; &lt;span style="color: blue;"&gt;#else&lt;/span&gt; &lt;span style="color: green;"&gt;// for non-UNICODE build&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  118&lt;/span&gt;         &lt;span style="color: blue;"&gt;const&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; size = MultiByteToWideChar(CP_ACP, 0, ptsz, -1, NULL, 0);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  119&lt;/span&gt; &lt;span style="color: blue;"&gt;#ifdef&lt;/span&gt; _DEBUG&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  120&lt;/span&gt;         &lt;span style="color: blue;"&gt;if&lt;/span&gt; (size == 0) {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  121&lt;/span&gt;             ASSERT(!_T(&lt;span style="color: #a31515;"&gt;"Function \"MultiByteToWideChar\" failed."&lt;/span&gt;));&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  122&lt;/span&gt;         }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  123&lt;/span&gt; &lt;span style="color: blue;"&gt;#endif&lt;/span&gt; &lt;span style="color: green;"&gt;// _DEBUG&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  124&lt;/span&gt;         ASSERT(size &amp;gt; 0);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  125&lt;/span&gt;         m_pwsz = (LPWSTR) malloc(&lt;span style="color: blue;"&gt;sizeof&lt;/span&gt;(WCHAR)*size);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  126&lt;/span&gt;         ASSERT(m_pwsz != NULL);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  127&lt;/span&gt; &lt;span style="color: blue;"&gt;#ifdef&lt;/span&gt; _DEBUG&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  128&lt;/span&gt;         memset(m_pwsz, 0, &lt;span style="color: blue;"&gt;sizeof&lt;/span&gt;(WCHAR)*size);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  129&lt;/span&gt; &lt;span style="color: blue;"&gt;#endif&lt;/span&gt; &lt;span style="color: green;"&gt;// _DEBUG&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  130&lt;/span&gt;         VERIFY(MultiByteToWideChar(CP_ACP, 0, ptsz, -1, m_pwsz, size) != 0);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  131&lt;/span&gt; &lt;span style="color: blue;"&gt;#endif&lt;/span&gt; &lt;span style="color: green;"&gt;// defined(_UNICODE)&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  132&lt;/span&gt;     }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  133&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  134&lt;/span&gt;     CTtoW(&lt;span style="color: blue;"&gt;const&lt;/span&gt; CTtoW&amp;amp; rhs) : m_pwsz(_wcsdup(rhs.m_pwsz))&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  135&lt;/span&gt;     {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  136&lt;/span&gt;         ASSERT(m_pwsz != NULL);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  137&lt;/span&gt;     }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  138&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  139&lt;/span&gt;     CTtoW&amp;amp; &lt;span style="color: blue;"&gt;operator&lt;/span&gt;=(&lt;span style="color: blue;"&gt;const&lt;/span&gt; CTtoW&amp;amp; rhs)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  140&lt;/span&gt;     {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  141&lt;/span&gt;         &lt;span style="color: blue;"&gt;if&lt;/span&gt; (&lt;span style="color: blue;"&gt;this&lt;/span&gt; != &amp;amp;rhs)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  142&lt;/span&gt;         {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  143&lt;/span&gt;             free(m_pwsz);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  144&lt;/span&gt;             m_pwsz = _wcsdup(rhs.m_pwsz);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  145&lt;/span&gt;             ASSERT(m_pwsz != NULL);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  146&lt;/span&gt;         }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  147&lt;/span&gt;         &lt;span style="color: blue;"&gt;return&lt;/span&gt; *&lt;span style="color: blue;"&gt;this&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  148&lt;/span&gt;     }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  149&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  150&lt;/span&gt;     ~CTtoW()&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  151&lt;/span&gt;     {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  152&lt;/span&gt;         free(m_pwsz);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  153&lt;/span&gt;     }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  154&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  155&lt;/span&gt;     size_t GetLength() &lt;span style="color: blue;"&gt;const&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; wcslen(m_pwsz); }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  156&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  157&lt;/span&gt;     &lt;span style="color: blue;"&gt;operator&lt;/span&gt; LPCWSTR() &lt;span style="color: blue;"&gt;const&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; m_pwsz; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  158&lt;/span&gt; };&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  159&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  160&lt;/span&gt; &lt;span style="color: green;"&gt;//////////////////////////////////////////////////////////////////////////&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  161&lt;/span&gt; &lt;span style="color: green;"&gt;//&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  162&lt;/span&gt; &lt;span style="color: green;"&gt;//  CAtoT&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  163&lt;/span&gt; &lt;span style="color: green;"&gt;//&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  164&lt;/span&gt; &lt;span style="color: green;"&gt;//      LPCSTR to LPCTSTR conversion.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  165&lt;/span&gt; &lt;span style="color: green;"&gt;//&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  166&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; CAtoT&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  167&lt;/span&gt; {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  168&lt;/span&gt;     LPTSTR m_ptsz;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  169&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  170&lt;/span&gt; &lt;span style="color: blue;"&gt;public&lt;/span&gt;:&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  171&lt;/span&gt;     CAtoT(LPCSTR psz) : m_ptsz(NULL)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  172&lt;/span&gt;     {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  173&lt;/span&gt;         ASSERT(psz != NULL);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  174&lt;/span&gt; &lt;span style="color: blue;"&gt;#if&lt;/span&gt; &lt;span style="color: blue;"&gt;defined&lt;/span&gt;(_UNICODE) &lt;span style="color: green;"&gt;// for UNICODE build&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  175&lt;/span&gt;         &lt;span style="color: blue;"&gt;const&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; size = MultiByteToWideChar(CP_ACP, 0, psz, -1, NULL, 0);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  176&lt;/span&gt; &lt;span style="color: blue;"&gt;#ifdef&lt;/span&gt; _DEBUG&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  177&lt;/span&gt;         &lt;span style="color: blue;"&gt;if&lt;/span&gt; (size == 0) {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  178&lt;/span&gt;             ASSERT(!_T(&lt;span style="color: #a31515;"&gt;"Function \"MultiByteToWideChar\" failed."&lt;/span&gt;));&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  179&lt;/span&gt;         }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  180&lt;/span&gt; &lt;span style="color: blue;"&gt;#endif&lt;/span&gt; &lt;span style="color: green;"&gt;// _DEBUG&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  181&lt;/span&gt;         ASSERT(size &amp;gt; 0);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  182&lt;/span&gt;         m_ptsz = (LPWSTR) malloc(&lt;span style="color: blue;"&gt;sizeof&lt;/span&gt;(WCHAR)*size);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  183&lt;/span&gt;         ASSERT(m_ptsz != NULL);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  184&lt;/span&gt; &lt;span style="color: blue;"&gt;#ifdef&lt;/span&gt; _DEBUG&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  185&lt;/span&gt;         memset(m_ptsz, 0, &lt;span style="color: blue;"&gt;sizeof&lt;/span&gt;(WCHAR)*size);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  186&lt;/span&gt; &lt;span style="color: blue;"&gt;#endif&lt;/span&gt; &lt;span style="color: green;"&gt;// _DEBUG&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  187&lt;/span&gt;         VERIFY(MultiByteToWideChar(CP_ACP, 0, psz, -1, m_ptsz, size) != 0);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  188&lt;/span&gt; &lt;span style="color: blue;"&gt;#else&lt;/span&gt; &lt;span style="color: green;"&gt;// for non-UNICODE build&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  189&lt;/span&gt;         m_ptsz = _strdup(psz);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  190&lt;/span&gt;         ASSERT(m_ptsz != NULL);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  191&lt;/span&gt; &lt;span style="color: blue;"&gt;#endif&lt;/span&gt; &lt;span style="color: green;"&gt;// defined(_UNICODE)&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  192&lt;/span&gt;     }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  193&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  194&lt;/span&gt;     CAtoT(&lt;span style="color: blue;"&gt;const&lt;/span&gt; CAtoT&amp;amp; rhs) : m_ptsz(_tcsdup(rhs.m_ptsz))&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  195&lt;/span&gt;     {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  196&lt;/span&gt;         ASSERT(m_ptsz != NULL);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  197&lt;/span&gt;     }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  198&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  199&lt;/span&gt;     CAtoT&amp;amp; &lt;span style="color: blue;"&gt;operator&lt;/span&gt;=(&lt;span style="color: blue;"&gt;const&lt;/span&gt; CAtoT&amp;amp; rhs)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  200&lt;/span&gt;     {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  201&lt;/span&gt;         &lt;span style="color: blue;"&gt;if&lt;/span&gt; (&lt;span style="color: blue;"&gt;this&lt;/span&gt; != &amp;amp;rhs)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  202&lt;/span&gt;         {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  203&lt;/span&gt;             free(m_ptsz);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  204&lt;/span&gt;             m_ptsz = _tcsdup(rhs.m_ptsz);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  205&lt;/span&gt;             ASSERT(m_ptsz != NULL);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  206&lt;/span&gt;         }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  207&lt;/span&gt;         &lt;span style="color: blue;"&gt;return&lt;/span&gt; *&lt;span style="color: blue;"&gt;this&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  208&lt;/span&gt;     }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  209&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  210&lt;/span&gt;     ~CAtoT()&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  211&lt;/span&gt;     {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  212&lt;/span&gt;         free(m_ptsz);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  213&lt;/span&gt;     }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  214&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  215&lt;/span&gt;     size_t GetLength() &lt;span style="color: blue;"&gt;const&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; _tcslen(m_ptsz); }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  216&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  217&lt;/span&gt;     &lt;span style="color: blue;"&gt;operator&lt;/span&gt; LPCTSTR() &lt;span style="color: blue;"&gt;const&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; m_ptsz; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  218&lt;/span&gt; };&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  219&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  220&lt;/span&gt; &lt;span style="color: green;"&gt;//////////////////////////////////////////////////////////////////////////&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  221&lt;/span&gt; &lt;span style="color: green;"&gt;//&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  222&lt;/span&gt; &lt;span style="color: green;"&gt;//  CWtoT&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  223&lt;/span&gt; &lt;span style="color: green;"&gt;//&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  224&lt;/span&gt; &lt;span style="color: green;"&gt;//      LPCWSTR to LPCTSTR conversion.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  225&lt;/span&gt; &lt;span style="color: green;"&gt;//&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  226&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; CWtoT&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  227&lt;/span&gt; {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  228&lt;/span&gt;     LPTSTR m_ptsz;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  229&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  230&lt;/span&gt; &lt;span style="color: blue;"&gt;public&lt;/span&gt;:&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  231&lt;/span&gt;     CWtoT(LPCWSTR pwsz) : m_ptsz(NULL)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  232&lt;/span&gt;     {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  233&lt;/span&gt;         ASSERT(pwsz != NULL);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  234&lt;/span&gt; &lt;span style="color: blue;"&gt;#if&lt;/span&gt; &lt;span style="color: blue;"&gt;defined&lt;/span&gt;(_UNICODE) &lt;span style="color: green;"&gt;// for UNICODE build&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  235&lt;/span&gt;         m_ptsz = _wcsdup(pwsz);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  236&lt;/span&gt;         ASSERT(m_ptsz != NULL);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  237&lt;/span&gt; &lt;span style="color: blue;"&gt;#else&lt;/span&gt; &lt;span style="color: green;"&gt;// for non-UNICODE build&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  238&lt;/span&gt;         &lt;span style="color: blue;"&gt;const&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; size = WideCharToMultiByte(CP_ACP, 0, pwsz, -1, &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  239&lt;/span&gt;             NULL, 0, NULL, NULL);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  240&lt;/span&gt; &lt;span style="color: blue;"&gt;#ifdef&lt;/span&gt; _DEBUG&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  241&lt;/span&gt;         &lt;span style="color: blue;"&gt;if&lt;/span&gt; (size == 0) {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  242&lt;/span&gt;             ASSERT(!_T(&lt;span style="color: #a31515;"&gt;"Function \"WideCharToMultiByte\" failed."&lt;/span&gt;));&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  243&lt;/span&gt;         }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  244&lt;/span&gt; &lt;span style="color: blue;"&gt;#endif&lt;/span&gt; &lt;span style="color: green;"&gt;// _DEBUG&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  245&lt;/span&gt;         ASSERT(size &amp;gt; 0);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  246&lt;/span&gt;         m_ptsz = (LPSTR) malloc(&lt;span style="color: blue;"&gt;sizeof&lt;/span&gt;(CHAR)*size);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  247&lt;/span&gt;         ASSERT(m_ptsz != NULL);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  248&lt;/span&gt; &lt;span style="color: blue;"&gt;#ifdef&lt;/span&gt; _DEBUG&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  249&lt;/span&gt;         memset(m_ptsz, 0, &lt;span style="color: blue;"&gt;sizeof&lt;/span&gt;(CHAR)*size);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  250&lt;/span&gt; &lt;span style="color: blue;"&gt;#endif&lt;/span&gt; &lt;span style="color: green;"&gt;// _DEBUG&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  251&lt;/span&gt;         VERIFY(WideCharToMultiByte(CP_ACP, 0, pwsz, -1, &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  252&lt;/span&gt;             m_ptsz, size, NULL, NULL) != 0);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  253&lt;/span&gt; &lt;span style="color: blue;"&gt;#endif&lt;/span&gt; &lt;span style="color: green;"&gt;// defined(_UNICODE)&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  254&lt;/span&gt;     }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  255&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  256&lt;/span&gt;     CWtoT(&lt;span style="color: blue;"&gt;const&lt;/span&gt; CWtoT&amp;amp; rhs) : m_ptsz(_tcsdup(rhs.m_ptsz))&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  257&lt;/span&gt;     {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  258&lt;/span&gt;         ASSERT(m_ptsz != NULL);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  259&lt;/span&gt;     }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  260&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  261&lt;/span&gt;     CWtoT&amp;amp; &lt;span style="color: blue;"&gt;operator&lt;/span&gt;=(&lt;span style="color: blue;"&gt;const&lt;/span&gt; CWtoT&amp;amp; rhs)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  262&lt;/span&gt;     {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  263&lt;/span&gt;         &lt;span style="color: blue;"&gt;if&lt;/span&gt; (&lt;span style="color: blue;"&gt;this&lt;/span&gt; != &amp;amp;rhs)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  264&lt;/span&gt;         {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  265&lt;/span&gt;             free(m_ptsz);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  266&lt;/span&gt;             m_ptsz = _tcsdup(rhs.m_ptsz);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  267&lt;/span&gt;             ASSERT(m_ptsz != NULL);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  268&lt;/span&gt;         }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  269&lt;/span&gt;         &lt;span style="color: blue;"&gt;return&lt;/span&gt; *&lt;span style="color: blue;"&gt;this&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  270&lt;/span&gt;     }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  271&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  272&lt;/span&gt;     ~CWtoT()&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  273&lt;/span&gt;     {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  274&lt;/span&gt;         free(m_ptsz);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  275&lt;/span&gt;     }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  276&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  277&lt;/span&gt;     size_t GetLength() &lt;span style="color: blue;"&gt;const&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; _tcslen(m_ptsz); }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  278&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  279&lt;/span&gt;     &lt;span style="color: blue;"&gt;operator&lt;/span&gt; LPCTSTR() &lt;span style="color: blue;"&gt;const&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; m_ptsz; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  280&lt;/span&gt; };&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  281&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  282&lt;/span&gt; &lt;span style="color: green;"&gt;//////////////////////////////////////////////////////////////////////////&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  283&lt;/span&gt; &lt;span style="color: green;"&gt;//&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  284&lt;/span&gt; &lt;span style="color: green;"&gt;//  CAtoW&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  285&lt;/span&gt; &lt;span style="color: green;"&gt;//&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  286&lt;/span&gt; &lt;span style="color: green;"&gt;//      LPCSTR to LPCWSTR conversion.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  287&lt;/span&gt; &lt;span style="color: green;"&gt;//&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  288&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; CAtoW&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  289&lt;/span&gt; {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  290&lt;/span&gt;     LPWSTR m_pwsz;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  291&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  292&lt;/span&gt; &lt;span style="color: blue;"&gt;public&lt;/span&gt;:&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  293&lt;/span&gt;     CAtoW(LPCSTR psz) : m_pwsz(NULL)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  294&lt;/span&gt;     {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  295&lt;/span&gt;         ASSERT(psz != NULL);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  296&lt;/span&gt;         &lt;span style="color: blue;"&gt;const&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; size = MultiByteToWideChar(CP_ACP, 0, psz, -1, NULL, 0);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  297&lt;/span&gt; &lt;span style="color: blue;"&gt;#ifdef&lt;/span&gt; _DEBUG&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  298&lt;/span&gt;         &lt;span style="color: blue;"&gt;if&lt;/span&gt; (size == 0) {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  299&lt;/span&gt;             ASSERT(!_T(&lt;span style="color: #a31515;"&gt;"Function \"MultiByteToWideChar\" failed."&lt;/span&gt;));&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  300&lt;/span&gt;         }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  301&lt;/span&gt; &lt;span style="color: blue;"&gt;#endif&lt;/span&gt; &lt;span style="color: green;"&gt;// _DEBUG&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  302&lt;/span&gt;         ASSERT(size &amp;gt; 0);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  303&lt;/span&gt;         m_pwsz = (LPWSTR) malloc(&lt;span style="color: blue;"&gt;sizeof&lt;/span&gt;(WCHAR)*size);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  304&lt;/span&gt;         ASSERT(m_pwsz != NULL);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  305&lt;/span&gt; &lt;span style="color: blue;"&gt;#ifdef&lt;/span&gt; _DEBUG&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  306&lt;/span&gt;         memset(m_pwsz, 0, &lt;span style="color: blue;"&gt;sizeof&lt;/span&gt;(WCHAR)*size);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  307&lt;/span&gt; &lt;span style="color: blue;"&gt;#endif&lt;/span&gt; &lt;span style="color: green;"&gt;// _DEBUG&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  308&lt;/span&gt;         VERIFY(MultiByteToWideChar(CP_ACP, 0, psz, -1, m_pwsz, size) != 0);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  309&lt;/span&gt;     }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  310&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  311&lt;/span&gt;     CAtoW(&lt;span style="color: blue;"&gt;const&lt;/span&gt; CAtoW&amp;amp; rhs) : m_pwsz(_wcsdup(rhs.m_pwsz))&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  312&lt;/span&gt;     {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  313&lt;/span&gt;         ASSERT(m_pwsz != NULL);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  314&lt;/span&gt;     }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  315&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  316&lt;/span&gt;     CAtoW&amp;amp; &lt;span style="color: blue;"&gt;operator&lt;/span&gt;=(&lt;span style="color: blue;"&gt;const&lt;/span&gt; CAtoW&amp;amp; rhs)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  317&lt;/span&gt;     {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  318&lt;/span&gt;         &lt;span style="color: blue;"&gt;if&lt;/span&gt; (&lt;span style="color: blue;"&gt;this&lt;/span&gt; != &amp;amp;rhs)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  319&lt;/span&gt;         {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  320&lt;/span&gt;             free(m_pwsz);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  321&lt;/span&gt;             m_pwsz = _wcsdup(rhs.m_pwsz);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  322&lt;/span&gt;             ASSERT(m_pwsz != NULL);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  323&lt;/span&gt;         }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  324&lt;/span&gt;         &lt;span style="color: blue;"&gt;return&lt;/span&gt; *&lt;span style="color: blue;"&gt;this&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  325&lt;/span&gt;     }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  326&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  327&lt;/span&gt;     ~CAtoW()&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  328&lt;/span&gt;     {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  329&lt;/span&gt;         free(m_pwsz);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  330&lt;/span&gt;     }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  331&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  332&lt;/span&gt;     size_t GetLength() &lt;span style="color: blue;"&gt;const&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; wcslen(m_pwsz); }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  333&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  334&lt;/span&gt;     &lt;span style="color: blue;"&gt;operator&lt;/span&gt; LPCWSTR() &lt;span style="color: blue;"&gt;const&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; m_pwsz; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  335&lt;/span&gt; };&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  336&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  337&lt;/span&gt; &lt;span style="color: green;"&gt;//////////////////////////////////////////////////////////////////////////&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  338&lt;/span&gt; &lt;span style="color: green;"&gt;//&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  339&lt;/span&gt; &lt;span style="color: green;"&gt;//  CWtoA&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  340&lt;/span&gt; &lt;span style="color: green;"&gt;//&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  341&lt;/span&gt; &lt;span style="color: green;"&gt;//      LPCWSTR to LPCSTR conversion.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  342&lt;/span&gt; &lt;span style="color: green;"&gt;//&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  343&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; CWtoA&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  344&lt;/span&gt; {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  345&lt;/span&gt;     LPSTR m_psz;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  346&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  347&lt;/span&gt; &lt;span style="color: blue;"&gt;public&lt;/span&gt;:&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  348&lt;/span&gt;     CWtoA(LPCWSTR pwsz) : m_psz(NULL)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  349&lt;/span&gt;     {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  350&lt;/span&gt;         ASSERT(pwsz != NULL);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  351&lt;/span&gt;         &lt;span style="color: blue;"&gt;const&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; size = WideCharToMultiByte(CP_ACP, 0, pwsz, -1, &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  352&lt;/span&gt;             NULL, 0, NULL, NULL);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  353&lt;/span&gt; &lt;span style="color: blue;"&gt;#ifdef&lt;/span&gt; _DEBUG&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  354&lt;/span&gt;         &lt;span style="color: blue;"&gt;if&lt;/span&gt; (size == 0) {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  355&lt;/span&gt;             ASSERT(!_T(&lt;span style="color: #a31515;"&gt;"Function \"WideCharToMultiByte\" failed."&lt;/span&gt;));&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  356&lt;/span&gt;         }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  357&lt;/span&gt; &lt;span style="color: blue;"&gt;#endif&lt;/span&gt; &lt;span style="color: green;"&gt;// _DEBUG&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  358&lt;/span&gt;         ASSERT(size &amp;gt; 0);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  359&lt;/span&gt;         m_psz = (LPSTR) malloc(&lt;span style="color: blue;"&gt;sizeof&lt;/span&gt;(CHAR)*size);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  360&lt;/span&gt;         ASSERT(m_psz != NULL);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  361&lt;/span&gt; &lt;span style="color: blue;"&gt;#ifdef&lt;/span&gt; _DEBUG&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  362&lt;/span&gt;         memset(m_psz, 0, &lt;span style="color: blue;"&gt;sizeof&lt;/span&gt;(CHAR)*size);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  363&lt;/span&gt; &lt;span style="color: blue;"&gt;#endif&lt;/span&gt; &lt;span style="color: green;"&gt;// _DEBUG&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  364&lt;/span&gt;         VERIFY(WideCharToMultiByte(CP_ACP, 0, pwsz, -1, &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  365&lt;/span&gt;             m_psz, size, NULL, NULL) != 0);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  366&lt;/span&gt;     }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  367&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  368&lt;/span&gt;     CWtoA(&lt;span style="color: blue;"&gt;const&lt;/span&gt; CWtoA&amp;amp; rhs) : m_psz(_strdup(rhs.m_psz))&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  369&lt;/span&gt;     {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  370&lt;/span&gt;         ASSERT(m_psz != NULL);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  371&lt;/span&gt;     }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  372&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  373&lt;/span&gt;     CWtoA&amp;amp; &lt;span style="color: blue;"&gt;operator&lt;/span&gt;=(&lt;span style="color: blue;"&gt;const&lt;/span&gt; CWtoA&amp;amp; rhs)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  374&lt;/span&gt;     {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  375&lt;/span&gt;         &lt;span style="color: blue;"&gt;if&lt;/span&gt; (&lt;span style="color: blue;"&gt;this&lt;/span&gt; != &amp;amp;rhs)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  376&lt;/span&gt;         {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  377&lt;/span&gt;             free(m_psz);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  378&lt;/span&gt;             m_psz = _strdup(rhs.m_psz);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  379&lt;/span&gt;             ASSERT(m_psz != NULL);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  380&lt;/span&gt;         }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  381&lt;/span&gt;         &lt;span style="color: blue;"&gt;return&lt;/span&gt; *&lt;span style="color: blue;"&gt;this&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  382&lt;/span&gt;     }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  383&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  384&lt;/span&gt;     ~CWtoA()&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  385&lt;/span&gt;     {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  386&lt;/span&gt;         free(m_psz);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  387&lt;/span&gt;     }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  388&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  389&lt;/span&gt;     size_t GetLength() &lt;span style="color: blue;"&gt;const&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; strlen(m_psz); }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  390&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  391&lt;/span&gt;     &lt;span style="color: blue;"&gt;operator&lt;/span&gt; LPCSTR() &lt;span style="color: blue;"&gt;const&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; m_psz; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  392&lt;/span&gt; };&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  393&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  394&lt;/span&gt; &lt;span style="color: green;"&gt;//////////////////////////////////////////////////////////////////////////&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  395&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;  396&lt;/span&gt; &lt;span style="color: blue;"&gt;#endif&lt;/span&gt; &lt;span style="color: green;"&gt;// !defined(_STRCONV_H_)&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;The usage of the classes are realy simple, here is an example:&lt;/p&gt;

&lt;table bgcolor="#dddddd" border="1" cellpadding="5" cellspacing="0" width="100%"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: #dddddd;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;    1&lt;/span&gt; ...&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;    2&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;    3&lt;/span&gt; &lt;span style="color: blue;"&gt;#include&lt;/span&gt; &lt;span style="color: #a31515;"&gt;"strconv.h"&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;    4&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;    5&lt;/span&gt; BOOL IsWireless(LPCTSTR pszAdapter)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;    6&lt;/span&gt; {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;    7&lt;/span&gt;     ...&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;    8&lt;/span&gt; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;    9&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   10&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; _tmain(&lt;span style="color: blue;"&gt;int&lt;/span&gt; argc, _TCHAR* argv[])&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   11&lt;/span&gt; {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   12&lt;/span&gt;     &lt;span style="color: blue;"&gt;char&lt;/span&gt; szAdapter[64];&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   13&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   14&lt;/span&gt;     ...&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   15&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   16&lt;/span&gt;     BOOL bIsWireless = IsWireless(CAtoT(szAdapter));&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   17&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   18&lt;/span&gt;     ...&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   19&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   20&lt;/span&gt;     &lt;span style="color: blue;"&gt;return&lt;/span&gt; 0;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;   21&lt;/span&gt; }&lt;/p&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=98746"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=98746" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/dastblog/aggbug/98746.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Daniel Strigl</dc:creator>
            <guid>http://geekswithblogs.net/dastblog/archive/2006/11/24/98746.aspx</guid>
            <pubDate>Fri, 24 Nov 2006 22:44:00 GMT</pubDate>
            <comments>http://geekswithblogs.net/dastblog/archive/2006/11/24/98746.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/dastblog/comments/commentRss/98746.aspx</wfw:commentRss>
        </item>
    </channel>
</rss>