<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>WCE: We Creation Embedded</title>
	<atom:link href="http://dev.catchkin.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://dev.catchkin.net</link>
	<description>We love embedded systems.</description>
	<pubDate>Mon, 28 Jul 2008 15:35:26 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>Serial Communications in Win32</title>
		<link>http://dev.catchkin.net/2008/07/28/serial-communications-in-win32/</link>
		<comments>http://dev.catchkin.net/2008/07/28/serial-communications-in-win32/#comments</comments>
		<pubDate>Mon, 28 Jul 2008 14:36:16 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Visual C++]]></category>

		<category><![CDATA[mfc]]></category>

		<category><![CDATA[serial communications]]></category>

		<category><![CDATA[visual c++]]></category>

		<category><![CDATA[win32]]></category>

		<guid isPermaLink="false">http://dev.catchkin.net/?p=42</guid>
		<description><![CDATA[Onsource: MSDN Library - October 2001
Allen Denver
Microsoft Windows Developer Support
December 11, 1995
Abstruct
Serial communications in Microsoft Win32 is significantly different from serial communications in 16-bit Microsoft Windows. Those familiar with 16-bit serial communications functions will have to relearn many parts of the system to program serial communications properly. This article will help to accomplish this. Those [...]]]></description>
			<content:encoded><![CDATA[<p>Onsource: MSDN Library - October 2001</p>
<p>Allen Denver<br />
Microsoft Windows Developer Support</p>
<p>December 11, 1995</p>
<h3><strong>Abstruct</strong></h3>
<p>Serial communications in Microsoft Win32 is significantly different from serial communications in 16-bit Microsoft Windows. Those familiar with 16-bit serial communications functions will have to relearn many parts of the system to program serial communications properly. This article will help to accomplish this. Those unfamiliar with serial communications will find this article a helpful foundation for development efforts.</p>
<p>This article assumes the reader is familiar with the fundamentals of multiple threading and synchronization in Win32.  In addition, a basic familiarity of the Win32 <strong>heap </strong>functions is useful to fully comprehend the memory management methods used by the sample, MTTTY, included with this article. For more information regarding these functions, consult the Platform SDK documentation, the Microsoft Win32 SDK Knowledge Base, or the Microsoft Developer Network Library. Application programming interfaces (APIs) that control user interface features of windows and dailog boxes, though not discussed here, are useful to know in order to fully comprehend the sample provided with this article. Readers unfamiliar with general Windows programming practices should learn some of the funcamentals of general Windows programming before taking on serial communications. In other words, get your feet web before diving in head first.</p>
<h3>Introduction</h3>
<p>The focus of this article is on application programming interface (APIs) and methods that are compatible with Microsoft Windows NT and Windows 95; therefore, APIs supported on both platforms are the only ones discussed. Windows 95 supports the Win32 Telephony API (TAPI) and Windows NT 3.x does not; therefore, this discussion will not include TAPI. TAPI does deserve mention, however, in that it very nicely implements modem interfacing and call controlling. A production application that works with modems and makes telephone calls should implement these features using the TAPI interface. This will allow seamless integration with the other TAPI-enabled applications that a user may have. Furthermore, this article does not discuss some of the configuration functions in Win32, such as <strong>GetCommProperties</strong>.</p>
<p>The article is broken into the following sections: Opening a port, reading and writing (nonoverlapped and overlapped), serial status (events and errors), and serial settings (DCB, flow control, and communications time-outs).</p>
<p>The sample included with this article, MTTTY: Multithreaded TTY, implements many of the features discussed here. It uses three threads in its implementation: a user interface thread that does memory management, a writer thread that controls all writing, and a reader/status thread that reads data and handles status changes on the port. The sample employs a few different data heaps for memory management. It also makes extensive use of synchronization methods to facilitate communication between threads.</p>
<h3>Opening a Port</h3>
<p>The <strong>CreateFile </strong>function opens a communications port. There are two ways to call <strong>CreateFile</strong> to open the communications port: overlapped and nonoverlapped. The following is the proper way to open a communications resource for overlapped operation:</p>
<blockquote><p>HANDLE hComm;<br />
hComm = CreateFile( gszPort,<br />
GENERIC_READ | GENERIC_WRITE,<br />
0,<br />
0,<br />
OPEN_EXISTING,<br />
FILE_FLAG_OVERAPPED,<br />
0);<br />
if (hComm == INVALID_HANDLE_VALUE)<br />
// error opening port; abort</p></blockquote>
<p>Removal of the FILE_FLAG_OVERLAPPED flag from the call to <strong>CreateFile</strong> specifies nonoverlapped operation. The next section discusses overlapped and nonoverlapped operations.</p>
<p>The Platform SDK documentation states that when opening a communications port, the call to <strong>CreateFile </strong>has the following requirements:</p>
<ul>
<li><em>fdwShareMode </em>must be zero. Communiciations ports cannot be shared in the same manner that files are shared. Applications using TAPI can use the TAPI functions to facilitate sharing resources between applications. For Win32 applications not using TAPI, handle inheritance or duplication is necessary to share the communications port. Handle duplication is beyond the scope of this article; please refer to the Platform SDK documentation for more information.</li>
<li><em>fdwCreate </em>must specify the OPEN_EXISTING flag.</li>
<li><em>hTemplateFile </em>parameter must be NULL.</li>
</ul>
<p>One thing to note about port names is that traditionally they have been COM1, COM2, COM3 or COM4. The Win32 API does not provide any mechanism for determining what ports exist on a system. Windows NT and Windows 95 keep track of installed ports differently from one another, so any one method would not be portable across all Win32 platforms. Some systems even they have more ports than the traditional maximum of four. Hardware vendors and serial-device-driver writers are free to name the ports anything they like. For this reason, it is best that users have the ability to specifiy the port name they want to use. If a port does not exist, an error will occur (ERROR_FILE_NOT_FOUND) after attempting to open the port, and the user should be notified that the port isn&#8217;t available.</p>
<h3>Reading and Writing</h3>
<p>Reading from and writing to communications ports in Win32 is very similar to file input/output (I/O) in Win32. In fact, the functions that accomplish file I/O are the same functions used for serial I/O. I/O in Win32 can be done either of two ways: overlapped or nonoverlapped. The Platform SDK documentation uses the terms <em>asynchronous</em> and <em>synchronous </em>to connote these types of I/O operations. This article, however, uses the terms <em>overlapped </em>and <em>nonoverlapped</em>.</p>
<p><em>Nonoverlapped I/O</em> is familiar to most developers because this is the traditional form of I/O, where an operation is requested and is assumed to be complete when the function returns. In the case of <em>overlapped I/O</em>, the system may return to the caller immediately even when an operation is not finished and will signal the caller when the operation completes. The program may use the time bewteen the I/O request and its completion to perform some &#8220;background&#8221; work.</p>
<p>Reading and writing in Win32 is significantly different from reading and writing serial communications ports in 16-bit Windows. 16-bit Windows only has the <strong>ReadComm </strong>and <strong>WriteComm </strong>functions. Win32 reading and writing can involve many more functions and choices. These issues are discussed below.</p>
<h3>Nonoverlapped I/O</h3>
<p>Nonoverlapped I/O is very straightforward, though it has limitations. An operation takes place while the calling thread is blocked. Once the operation is complete, the function returns and the thread can continue its work. This type of I/O is useful for multithreaded applications because while one thread is blocked on an I/O operation, other threads can still perform work. It is the responsibility of the application to serialize access to the port correctly. If one thread is blocked waiting for its I/O operation to complete, all other threads that subsequently call a communications API will be blocked until the original operation completes. For instance, if one thread were waiting for a <strong>ReadFile </strong>function to return, any other thread that issued a <strong>WriteFile </strong>function would be blocked.</p>
<p>One of the many factors to consider when choosing between nonoverlapped and overlapped operations is portability. Overlapped operation is not a good choice because most operationg systems do not support it. Most operating systems support some form of multithreading, however, so multithreaded nonoverlapped I/O may be the best choice for portability reasons.</p>
<p><strong>Overlapped I/O</strong></p>
<p>A</p>
]]></content:encoded>
			<wfw:commentRss>http://dev.catchkin.net/2008/07/28/serial-communications-in-win32/feed/</wfw:commentRss>
		</item>
		<item>
		<title>DCB Structure</title>
		<link>http://dev.catchkin.net/2008/07/28/dcb-structure/</link>
		<comments>http://dev.catchkin.net/2008/07/28/dcb-structure/#comments</comments>
		<pubDate>Mon, 28 Jul 2008 14:12:12 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Visual C++]]></category>

		<category><![CDATA[DCB]]></category>

		<category><![CDATA[mfc]]></category>

		<category><![CDATA[serial communications]]></category>

		<category><![CDATA[visual c++]]></category>

		<guid isPermaLink="false">http://dev.catchkin.net/?p=41</guid>
		<description><![CDATA[DCB Structure
Defines the control setting for a serial communications device.
typedef struct _DCB {
DWORD DCBlength;
DWORD BaudRate;
DWORD fBinary  :1;
DWORD fParity  :1;
DWORD fOutXCtsFlow  :1;
DWORD fOutXDsrFlow  :1;
DWORD fDtrControl  :2;
DWORD fDsrSensitivity  :1;
DWORD fTXContinueOnXoff  :1;
DWORD fOutX  :1;
DWORD fInX  :1;
DWORD fErrorChar  :1;
DWORD fNull  :1;
DWORD fRtsControl  :2;
DWORD fAbortOnError  :1;
DWORD fDummy2  :17;
WORD wReserved;
WORD XonLim;
WORD XoffLim;
BYTE ByteSize;
BYTE Parity;
BYTE StopBits;
char XonChar;
char XoffChar;
char ErrorChar;
char EofChar;
char EvtChar;
WORD wReserved1;
} [...]]]></description>
			<content:encoded><![CDATA[<h2><strong>DCB Structure</strong></h2>
<p>Defines the control setting for a serial communications device.</p>
<blockquote><p>typedef struct _DCB {</p>
<p>DWORD DCBlength;<br />
DWORD BaudRate;<br />
DWORD fBinary  :1;<br />
DWORD fParity  :1;<br />
DWORD fOutXCtsFlow  :1;<br />
DWORD fOutXDsrFlow  :1;<br />
DWORD fDtrControl  :2;<br />
DWORD fDsrSensitivity  :1;<br />
DWORD fTXContinueOnXoff  :1;<br />
DWORD fOutX  :1;<br />
DWORD fInX  :1;<br />
DWORD fErrorChar  :1;<br />
DWORD fNull  :1;<br />
DWORD fRtsControl  :2;<br />
DWORD fAbortOnError  :1;<br />
DWORD fDummy2  :17;<br />
WORD wReserved;<br />
WORD XonLim;<br />
WORD XoffLim;<br />
BYTE ByteSize;<br />
BYTE Parity;<br />
BYTE StopBits;<br />
char XonChar;<br />
char XoffChar;<br />
char ErrorChar;<br />
char EofChar;<br />
char EvtChar;<br />
WORD wReserved1;</p>
<p>} DCB,<br />
*LPDCB;</p></blockquote>
<p><strong>Members</strong></p>
<p><strong>DCBlength</strong></p>
<blockquote><p>The length of the structure, in bytes. The caller must set this member to sizeof(DCB).</p></blockquote>
<p><strong>BaudRate</strong></p>
<blockquote><p>The baud rate at which the communications device operates. This member can be an actual baud rate value, or one of the following indexes.</p></blockquote>
<p><a title="DCB Structre" href="http://msdn.microsoft.com/en-us/library/aa363214(VS.85).aspx" target="_blank">more</a></p>
]]></content:encoded>
			<wfw:commentRss>http://dev.catchkin.net/2008/07/28/dcb-structure/feed/</wfw:commentRss>
		</item>
		<item>
		<title>AfxBeginThread</title>
		<link>http://dev.catchkin.net/2008/07/28/afxbeginthread/</link>
		<comments>http://dev.catchkin.net/2008/07/28/afxbeginthread/#comments</comments>
		<pubDate>Mon, 28 Jul 2008 13:27:48 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Visual C++]]></category>

		<category><![CDATA[AfxBeginThread]]></category>

		<category><![CDATA[mfc]]></category>

		<category><![CDATA[visual c++]]></category>

		<guid isPermaLink="false">http://dev.catchkin.net/?p=40</guid>
		<description><![CDATA[AfxBeginThread
CWinThread* AfxBeginThread( AFX_THREADPROC pfnThreadProc, LPVOID pParam, int nPriority = THREAD_PRIORITY_NORMAL, UINT nStackSize = 0, DWORD dwCreateFlags = 0, LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL );
CWinThread* AfxBeginThread( CRuntimeClass* pThreadClass, int nPriority = THREAD_PRIORITY_NORMAL, UINT nStackSize = 0, DWORD dwCreateFlags = 0, LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL );
Return Value
Pointer to the newly created thread object.
Parameters
pfnThreadProc
Points to the controlling function for [...]]]></description>
			<content:encoded><![CDATA[<p>AfxBeginThread</p>
<p>CWinThread* AfxBeginThread( AFX_THREADPROC <em>pfnThreadProc</em>, LPVOID <em>pParam</em>, int <em>nPriority </em>= THREAD_PRIORITY_NORMAL, UINT <em>nStackSize </em>= 0, DWORD <em>dwCreateFlags </em>= 0, LPSECURITY_ATTRIBUTES <em>lpSecurityAttrs </em>= NULL );</p>
<p>CWinThread* AfxBeginThread( CRuntimeClass* <em>pThreadClass</em>, int <em>nPriority</em> = THREAD_PRIORITY_NORMAL, UINT <em>nStackSize </em>= 0, DWORD <em>dwCreateFlags </em>= 0, LPSECURITY_ATTRIBUTES <em>lpSecurityAttrs </em>= NULL );</p>
<p><strong>Return Value</strong></p>
<blockquote><p>Pointer to the newly created thread object.</p></blockquote>
<p><strong>Parameters</strong></p>
<p><em>pfnThreadProc</em></p>
<blockquote><p>Points to the controlling function for the worker thread. Cannot be <strong>NULL</strong>. This function must be declared as follows:</p>
<p>UINT MyControllingFunction( LPVOID pParam );</p></blockquote>
<p><em>pThreadClass</em></p>
<blockquote><p>The RUNTIME_CLASS of an object derived from CWinThread.</p></blockquote>
<p><em>pParam</em></p>
<blockquote><p>Parameter to be passed to the controlling function as shown in the parameter to the function declaration in <em>pfnThreadProc.</em></p></blockquote>
<p><em>nPriority </em></p>
<blockquote><p>The desired priority of the thread. If 0, the same priority as the creating thread will be used. For a full list and description of the available priorities, see SetThreadPriority in the <em>Win32 Programmer&#8217;s Reference</em>.</p></blockquote>
<p><em>nStackSize </em></p>
<blockquote><p>Specifies the size in bytes of the stack for the new thread. If 0, the stack size defaults to the same size stack as the creating thread.<em></em></p></blockquote>
<p><em>dwCreateFlags </em></p>
<blockquote><p>Specifies an additional flag that controls the creation of the thread. This flag can contain one of two values:</p>
<p><strong>CREATE_SUSPENDED</strong> start the thread with a suspend count of one. The thread will not execute until ResumeThread is called.</p>
<p><strong>0</strong> start the thread immediately after creation.</p></blockquote>
<p><em>lpSecurityAttrs </em></p>
<blockquote><p>Points to a SECURITY_ATTRIBUTES structure that specifies the security attributes for the thread. If <strong>NULL</strong>, the same security attributes as the creating thread will be used. For more information on this structure, see the <em>Win32 Programmer&#8217;s Reference</em>.</p></blockquote>
<p><strong>Remarks</strong></p>
<blockquote><p>Call this function to create a new thread. The first form of <strong>AfxBeginThread </strong>creates a worker thread. The second form creates a user-interface thread.</p>
<p><strong>AfxBeginThread </strong>creates a new <strong>CWinThread </strong>object, calls its <span style="text-decoration: underline;">CreateThread </span>function to start executing the thread, and returns a pointer to the thread.  Checks are made throughout the procedure to make sure all objects are deallocated properly should any part of the creation fail. To end the thread, call <strong>AfxEndThread </strong>from within the thread, or return from the controlling function of the worker thread.</p></blockquote>
<p>source: MSDN Library - October 2001</p>
<blockquote></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://dev.catchkin.net/2008/07/28/afxbeginthread/feed/</wfw:commentRss>
		</item>
		<item>
		<title>IMPLEMENT_DYNCREATE</title>
		<link>http://dev.catchkin.net/2008/07/28/implement_dyncreate/</link>
		<comments>http://dev.catchkin.net/2008/07/28/implement_dyncreate/#comments</comments>
		<pubDate>Mon, 28 Jul 2008 11:56:23 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Visual C++]]></category>

		<category><![CDATA[mfc]]></category>

		<category><![CDATA[visual c++]]></category>

		<guid isPermaLink="false">http://dev.catchkin.net/?p=39</guid>
		<description><![CDATA[IMPLEMENT_DYNCREATE( class_name, base_class_name )
Parameters
class_name
The actual name of the class (not enclosed in quotation marks).
base_class_name
The actual name of the base class (not enclosed in quotation marks).
Remarks
Use the IMPLEMENT_DYNCREATE macro with the DECLARE_DYNCREATE macro to enable objects of CObject-derived classes to be created dynamically at run time. The framework uses this ability to create new objects dynamically, [...]]]></description>
			<content:encoded><![CDATA[<p>IMPLEMENT_DYNCREATE( <em>class_name, base_class_name</em> )</p>
<p><strong>Parameters</strong></p>
<p><em>class_name</em></p>
<blockquote><p>The actual name of the class (not enclosed in quotation marks).</p></blockquote>
<p><em>base_class_name</em></p>
<blockquote><p>The actual name of the base class (not enclosed in quotation marks).</p></blockquote>
<p><strong>Remarks</strong></p>
<blockquote><p>Use the IMPLEMENT_DYNCREATE macro with the <strong>DECLARE_DYNCREATE</strong> macro to enable objects of <strong>CObject</strong>-derived classes to be created dynamically at run time. The framework uses this ability to create new objects dynamically, for example, when it reads an object from disk during serialization. Add the IMPLEMENT_DYNCREATE macro in the class implementation file.</p>
<p>If you use the <strong>DECLEAR_DYNCREATE</strong> and IMPLEMENT_DYNCREATE macros, you can then use the <strong>RUNTIME_CLASS</strong> macro and the <strong>CObject::IsKindOf</strong> member function to determine the class of your objects at run time.</p>
<p>If DECLARE_DYNCREATE is included in the class declaration, then IMPLEMENT_DYNCREATE must be included in the class implementation.</p></blockquote>
<p>source: MSDN Library - October 2001</p>
]]></content:encoded>
			<wfw:commentRss>http://dev.catchkin.net/2008/07/28/implement_dyncreate/feed/</wfw:commentRss>
		</item>
		<item>
		<title>DECLARE_DYNCREATE</title>
		<link>http://dev.catchkin.net/2008/07/28/declare_dyncreate/</link>
		<comments>http://dev.catchkin.net/2008/07/28/declare_dyncreate/#comments</comments>
		<pubDate>Mon, 28 Jul 2008 11:34:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Visual C++]]></category>

		<category><![CDATA[mfc]]></category>

		<category><![CDATA[visual c++]]></category>

		<guid isPermaLink="false">http://dev.catchkin.net/?p=38</guid>
		<description><![CDATA[Parameters
class_name
The actual name of the class (not enclosed in quotation marks).
Remarks
Use the DECLARE_DYNCREATE macro to enable objects of CObject-derived classes to be created dynamically at run time. The framework uses this ability to create new objects dynamically, for example, when it reads an object from disk during serialization. Document, view, and frame classes should support [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Parameters</strong></p>
<p><em>class_name</em></p>
<blockquote><p>The actual name of the class (not enclosed in quotation marks).</p></blockquote>
<p><strong>Remarks</strong></p>
<blockquote><p>Use the DECLARE_DYNCREATE macro to enable objects of <strong>CObject</strong>-derived classes to be created dynamically at run time. The framework uses this ability to create new objects dynamically, for example, when it reads an object from disk during serialization. Document, view, and frame classes should support dynamic creation because the framework needs to create them dynamically.</p>
<p>Add the DECLARE_DYNCREATE macro in the .H module for the class, then include that module in all .CPP modules that need access to objects of this class.</p>
<p>If DECLARE_DYNCREATE is included in the class declaration, then IMPLEMENT_DYNCREATE must be included in the class implementation.</p></blockquote>
<p>source: MSDN Library - October 2001</p>
]]></content:encoded>
			<wfw:commentRss>http://dev.catchkin.net/2008/07/28/declare_dyncreate/feed/</wfw:commentRss>
		</item>
		<item>
		<title>콘트롤과 클래스의 연결</title>
		<link>http://dev.catchkin.net/2008/07/28/howto_connect_control_class/</link>
		<comments>http://dev.catchkin.net/2008/07/28/howto_connect_control_class/#comments</comments>
		<pubDate>Mon, 28 Jul 2008 10:38:53 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Visual C++]]></category>

		<category><![CDATA[class]]></category>

		<category><![CDATA[mfc]]></category>

		<category><![CDATA[visual c++]]></category>

		<guid isPermaLink="false">http://dev.catchkin.net/?p=37</guid>
		<description><![CDATA[콘트롤의 핸들로 클래스와 연결하는 방법?
]]></description>
			<content:encoded><![CDATA[<p>콘트롤의 핸들로 클래스와 연결하는 방법?</p>
]]></content:encoded>
			<wfw:commentRss>http://dev.catchkin.net/2008/07/28/howto_connect_control_class/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Convert CString to int in MFC</title>
		<link>http://dev.catchkin.net/2008/07/11/convert-cstring-to-int-in-mfc/</link>
		<comments>http://dev.catchkin.net/2008/07/11/convert-cstring-to-int-in-mfc/#comments</comments>
		<pubDate>Fri, 11 Jul 2008 14:14:15 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Visual C++]]></category>

		<category><![CDATA[CString]]></category>

		<category><![CDATA[mfc]]></category>

		<category><![CDATA[visual c++]]></category>

		<guid isPermaLink="false">http://dev.catchkin.net/?p=34</guid>
		<description><![CDATA[How?
]]></description>
			<content:encoded><![CDATA[<p>How?</p>
]]></content:encoded>
			<wfw:commentRss>http://dev.catchkin.net/2008/07/11/convert-cstring-to-int-in-mfc/feed/</wfw:commentRss>
		</item>
		<item>
		<title>CArray</title>
		<link>http://dev.catchkin.net/2008/07/11/carray/</link>
		<comments>http://dev.catchkin.net/2008/07/11/carray/#comments</comments>
		<pubDate>Thu, 10 Jul 2008 17:53:04 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Visual C++]]></category>

		<category><![CDATA[mfc]]></category>

		<category><![CDATA[visual c++]]></category>

		<guid isPermaLink="false">http://dev.catchkin.net/?p=33</guid>
		<description><![CDATA[CArray&#60;char,100&#62;
CArray&#60;int,30&#62;
CArray&#60;short,short&#62;
]]></description>
			<content:encoded><![CDATA[<p>CArray&lt;char,100&gt;</p>
<p>CArray&lt;int,30&gt;</p>
<p>CArray&lt;short,short&gt;</p>
]]></content:encoded>
			<wfw:commentRss>http://dev.catchkin.net/2008/07/11/carray/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Howto print variables to AfxMessageBox in MFC</title>
		<link>http://dev.catchkin.net/2008/07/10/howto-print-variables-to-afxmessagebox-in-mfc/</link>
		<comments>http://dev.catchkin.net/2008/07/10/howto-print-variables-to-afxmessagebox-in-mfc/#comments</comments>
		<pubDate>Wed, 09 Jul 2008 17:54:25 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Visual C++]]></category>

		<category><![CDATA[AfxMessageBox]]></category>

		<category><![CDATA[mfc]]></category>

		<category><![CDATA[visual c++]]></category>

		<guid isPermaLink="false">http://dev.catchkin.net/?p=31</guid>
		<description><![CDATA[MFC에서 local 변수를 AfxMessageBox로 print하려고 합니다. printf나 sprintf로 강제로  변환을 시도해 보았으나 잘 안됩니다. 잘 모르겠습니다. 다음 방법도 MFC에서 올바른 사용법인지는 확실하지 않지만, error없이 동작을 잘 하기에 계속 사용하고 있습니다. 제 방법이 틀렸다면 지적 좀 해주세욤. 꾸뻑^^
CString msg;
msg.Format(_T(&#8221;0x%x&#8221;), variable);
AfxMessageBox(msg);
]]></description>
			<content:encoded><![CDATA[<p>MFC에서 local 변수를 AfxMessageBox로 print하려고 합니다. printf나 sprintf로 강제로  변환을 시도해 보았으나 잘 안됩니다. 잘 모르겠습니다. 다음 방법도 MFC에서 올바른 사용법인지는 확실하지 않지만, error없이 동작을 잘 하기에 계속 사용하고 있습니다. 제 방법이 틀렸다면 지적 좀 해주세욤. 꾸뻑^^</p>
<blockquote><p>CString msg;<br />
msg.Format(_T(&#8221;0x%x&#8221;), variable);</p>
<p>AfxMessageBox(msg);</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://dev.catchkin.net/2008/07/10/howto-print-variables-to-afxmessagebox-in-mfc/feed/</wfw:commentRss>
		</item>
		<item>
		<title>CString Class Members</title>
		<link>http://dev.catchkin.net/2008/07/10/cstring-class-members/</link>
		<comments>http://dev.catchkin.net/2008/07/10/cstring-class-members/#comments</comments>
		<pubDate>Wed, 09 Jul 2008 16:22:04 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Visual C++]]></category>

		<category><![CDATA[class]]></category>

		<category><![CDATA[mfc]]></category>

		<category><![CDATA[visual c++]]></category>

		<guid isPermaLink="false">http://dev.catchkin.net/?p=30</guid>
		<description><![CDATA[TrimLeft
Trim leading whitespace characters from the string.
TrimRight
Ttim trailing whitespace characters from the string.
]]></description>
			<content:encoded><![CDATA[<h3>TrimLeft</h3>
<p>Trim leading whitespace characters from the string.</p>
<h3>TrimRight</h3>
<p>Ttim trailing whitespace characters from the string.</p>
]]></content:encoded>
			<wfw:commentRss>http://dev.catchkin.net/2008/07/10/cstring-class-members/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
