<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>J.K&#039;s Life And Story</title>
		<link>http://sanaigon.tistory.com/</link>
		<description>sanaigon@gmail.com</description>
		<language>ko</language>
		<pubDate>Wed, 14 Dec 2011 11:10:24 +0900</pubDate>
		<generator>Tistory 1.1 (http://www.tistory.com/)</generator>
		<managingEditor>J.K 스나이퍼</managingEditor>
		<image>
		<title>J.K&#039;s Life And Story</title>
		<url><![CDATA[http://cfs8.tistory.com/upload_control/download.blog?fhandle=YmxvZzE3NTA3OUBmczgudGlzdG9yeS5jb206L2F0dGFjaC8wLzEyLmpwZw%3D%3D]]></url>
		<link>http://sanaigon.tistory.com/</link>
		<description>sanaigon@gmail.com</description>
		</image>
		<item>
			<title>Sleep(0)과 Sleep(1)의 차이</title>
			<link>http://sanaigon.tistory.com/150</link>
			<description>&lt;br /&gt;
&amp;nbsp;Thread 간 우선순위(Priority) 가 다른 경우에 사용법이 틀려 진다.&lt;br /&gt;
&lt;br /&gt;&lt;STRONG&gt;1. Sleep(0)&lt;/STRONG&gt;&lt;br /&gt;
다른 Thread 가 Ready to run 되었다고 해서 자신이 쥐고 있는 CPU의 선점을 풀지 않는다.&lt;br /&gt;
&amp;nbsp;Ready to run 되어 있는 Thread 가 지금 선점한 Thread 와 우선순위가 같아야 선점을 푼다. &lt;br /&gt;
&lt;br /&gt;이 함수를 호출한 스레드가 남은 타임 슬리아스(Time Slace) 를 자동적으로 포기하여 시스템이&lt;br /&gt;
다른 스레드를 스케줄 하게 한다. 그런데 시스템에 이 함수를 호출한 스레드와 우선순위가 같거나&lt;br /&gt;
그보다 높은 스레드 중에 스케줄 가능 스레드가 없는 경우 Sleep 함수를 호출한 스레드가 다시 &lt;br /&gt;
스케줄 될 수도 있다.&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;STRONG&gt;2. Sleep(1)&lt;/STRONG&gt;&lt;br /&gt;
Thread 간의 우선순위에 관계없이 다른 Thread 가 Ready to run 상태에 있다면 자신이 쥐고 있던 Thread 선점을 풀고&lt;br /&gt;
Ready to run 상태인 Thread 에 CPU 를 넘겨준다.&lt;br /&gt;
즉, Context switching 이 이루어 진다.
&lt;SCRIPT src=&quot;http://six605.tistory.com/plugin/CallBack_bootstrapper?&amp;amp;src=http://s1.daumcdn.net/cfs.tistory/v/0/blog/plugins/CallBack/callback&amp;amp;id=258&amp;amp;callbackId=six605tistorycom2587176&amp;amp;destDocId=callbacknestsix605tistorycom2587176&amp;amp;host=http://six605.tistory.com&amp;amp;float=left&amp;amp;random=14&quot;&gt;&lt;/SCRIPT&gt;</description>
			<category>Windows Programming (MFC)</category>
			<author>J.K 스나이퍼</author>
			<guid>http://sanaigon.tistory.com/150</guid>
			<comments>http://sanaigon.tistory.com/150#entry150comment</comments>
			<pubDate>Wed, 14 Dec 2011 11:07:01 +0900</pubDate>
		</item>
		<item>
			<title>[펌] CListCtrl 작업시 유용한 것들</title>
			<link>http://sanaigon.tistory.com/149</link>
			<description>&lt;br /&gt;

&lt;TABLE border=0 cellSpacing=0 cellPadding=0 width=&quot;100%&quot; align=center&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width=&quot;5%&quot;&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=&quot;74%&quot;&gt;
&lt;DIV id=LEFT&gt;&lt;!-- egloos content start --&gt;
&lt;DIV class=hentry&gt;&lt;SPAN style=&quot;DISPLAY: none&quot; class=copyright_entry title=&quot;리스트컨트롤 작업시 유용한것들.@@**@@http://minujang.egloos.com/2254211&quot;&gt;&lt;/SPAN&gt;
&lt;DIV class=POST&gt;
&lt;DIV class=POST_HEAD&gt;
&lt;TABLE border=0 cellSpacing=0 cellPadding=0 width=&quot;100%&quot;&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width=&quot;80%&quot;&gt;
&lt;DIV class=POST_TTL&gt;&lt;A title=&quot;리스트컨트롤 작업시 유용한것들.&quot; name=2254211&gt;리스트컨트롤 작업시 유용한것들.&lt;/A&gt;&lt;/DIV&gt;&lt;/TD&gt;
&lt;TD width=&quot;20%&quot; align=right&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;
&lt;DIV class=POST_BODY&gt;&lt;SPAN style=&quot;LINE-HEIGHT: 22px; FONT-FAMILY: 돋움; COLOR: rgb(218,218,218)&quot; class=Apple-style-span&gt;
&lt;DIV&gt;&lt;FONT style=&quot;LINE-HEIGHT: 150%&quot;&gt;&lt;FONT style=&quot;LINE-HEIGHT: 150%&quot; size=2&gt;&lt;FONT class=Apple-style-span face=Verdana&gt;&lt;FONT class=Apple-style-span color=#000000&gt;1. 특정 ROW 포커스 주기&lt;br /&gt;
2. 특정 ROW로 가기&lt;br /&gt;
3. 헤더 컬럼수 얻어오기&lt;br /&gt;
4. 컬럼의 너비를 이쁘게 주기&lt;br /&gt;
5. 한줄 쭉 선택되게 하기, 그리드 라인 주기&lt;br /&gt;
6. 선택한 아이템(ROW)를 지우기&lt;br /&gt;
7. 두 아이템을 스왑 하기&lt;br /&gt;
8.기존에 선택되어있는 것을 해체하기&lt;br /&gt;
9. 리스트컨트롤내 모든 항목을 선택하기&lt;br /&gt;
10. 리스트컨트롤내 모든 항목을 선택해제 하기&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT style=&quot;LINE-HEIGHT: 150%&quot;&gt;&lt;FONT style=&quot;LINE-HEIGHT: 150%&quot; size=2&gt;&lt;FONT class=Apple-style-span face=Verdana&gt;&lt;FONT class=Apple-style-span color=#000000&gt;11. 리스트컨트롤에 선택된 항목을 클립보드에 저장하기.&lt;br /&gt;
&lt;br /&gt;1. 특정 ROW 포커스 주기&lt;br /&gt;
---------------------------------------------------&lt;br /&gt;
리스트 컨트롤에서 어떤 특정 Row를 선택하게 하고 싶을때&lt;br /&gt;
( 이때 선택뿐아니라 포커스도 가야 한다.&lt;br /&gt;
포커스가 간다는 의미는 다음에 키다운을 하면 바로 부드럽게&lt;br /&gt;
다음 아이템을 가리키도록 하는 것이다 )&lt;br /&gt;
&lt;br /&gt;ListView_SetItemState (pListCtrl-&amp;gt;GetSafeHwnd(), // handle to listview&lt;br /&gt;
10, // index to listview item&lt;br /&gt;
LVIS_FOCUSED | LVIS_SELECTED, // item state&lt;br /&gt;
0x000F); //mask&lt;br /&gt;
&lt;br /&gt;위와 같이 코딩하면 된다.&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
2. 특정 ROW로 가기&lt;br /&gt;
---------------------------------------------------&lt;br /&gt;
만일 원하는 Row를 스크롤을 하던 어떻게 하든 화면에 보이게&lt;br /&gt;
하고 싶을때&lt;br /&gt;
&lt;br /&gt;pListCtrl-&amp;gt;EnsureVisible(15, TRUE);&lt;br /&gt;
&lt;br /&gt;이렇게 하면 된다.&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
3. 헤더 컬럼수 얻어오기&lt;br /&gt;
---------------------------------------------------&lt;br /&gt;
헤더 컬럼의 갯수를 알고 싶을때&lt;br /&gt;
CHeaderCtrl* pHeader = (CHeaderCtrl*)GetDlgItem(0);&lt;br /&gt;
int nColumnCount = pHeader-&amp;gt;GetItemCount();&lt;br /&gt;
&lt;br /&gt;또는 pList-&amp;gt;GetHeaderCtrl()을 통해서 얻어올수 도 있다.&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
4. 컬럼의 너비를 이쁘게 주기&lt;br /&gt;
---------------------------------------------------&lt;br /&gt;
공백없이 잘 채워 준다.&lt;br /&gt;
&lt;br /&gt;부모 다이얼로그의 OnSize에서&lt;br /&gt;
void CAttrListDlg::OnSize(UINT nType, int cx, int cy) &lt;br /&gt;
{&lt;br /&gt;
CDialog::OnSize(nType, cx, cy);&lt;br /&gt;
&lt;br /&gt;// TODO: Add your message handler code here&lt;br /&gt;
if( IsWindow( z_AttrList.m_hWnd ))&lt;br /&gt;
{&lt;br /&gt;
z_AttrList.MoveWindow( 0, 0, cx, cy );&lt;br /&gt;
z_AttrList.SetColumnWidth(1 , LVSCW_AUTOSIZE_USEHEADER);&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
5. 한줄 쭉 선택되게 하기, 그리드 라인 주기&lt;br /&gt;
---------------------------------------------------&lt;br /&gt;
z_AttrList.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT); &lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
6. 선택한 아이템(ROW)를 지우기&lt;br /&gt;
---------------------------------------------------&lt;br /&gt;
&lt;br /&gt;CDWordArray m_anDragIndexes; // 선택한 아이템을 기억하는&lt;br /&gt;
배열&lt;br /&gt;
&lt;br /&gt;int CAttrList::fnRemoveItem()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;m_anDragIndexes.RemoveAll();&lt;br /&gt;
POSITION pos = GetFirstSelectedItemPosition();&lt;br /&gt;
while (pos)&lt;br /&gt;
{&lt;br /&gt;
m_anDragIndexes.Add(GetNextSelectedItem(pos));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;int nSize = m_anDragIndexes.GetSize(); &lt;br /&gt;
int nRet = -1;&lt;br /&gt;
if( nSize )&lt;br /&gt;
nRet = m_anDragIndexes[0]; &lt;br /&gt;
&lt;br /&gt;while( nSize-- )&lt;br /&gt;
DeleteItem( m_anDragIndexes[nSize] );&lt;br /&gt;
&lt;br /&gt;m_anDragIndexes.RemoveAll();&lt;br /&gt;
return nRet;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
7. 두 아이템을 스왑 하기&lt;br /&gt;
---------------------------------------------------&lt;br /&gt;
void CAttrList::fnSwapItem( int nItem1, int nItem2 )&lt;br /&gt;
{&lt;br /&gt;
int hi = nItem2;&lt;br /&gt;
int lo = nItem1;&lt;br /&gt;
CStringArray rowText;&lt;br /&gt;
&lt;br /&gt;LV_ITEM lvitemlo, lvitemhi;&lt;br /&gt;
CHeaderCtrl* pHeaderCtrl = GetHeaderCtrl();&lt;br /&gt;
int nColCount =pHeaderCtrl-&amp;gt;GetItemCount();&lt;br /&gt;
&lt;br /&gt;rowText.SetSize( nColCount );&lt;br /&gt;
int i;&lt;br /&gt;
for( i=0; i&amp;lt;nColCount; i++)&lt;br /&gt;
rowText[i] = GetItemText(lo, i);&lt;br /&gt;
lvitemlo.mask = LVIF_IMAGE | LVIF_PARAM | LVIF_STATE;&lt;br /&gt;
lvitemlo.iItem = lo;&lt;br /&gt;
lvitemlo.iSubItem = 0;&lt;br /&gt;
lvitemlo.stateMask = LVIS_CUT | LVIS_DROPHILITED |&lt;br /&gt;
LVIS_FOCUSED | LVIS_SELECTED |&lt;br /&gt;
LVIS_OVERLAYMASK | LVIS_STATEIMAGEMASK;&lt;br /&gt;
&lt;br /&gt;lvitemhi = lvitemlo;&lt;br /&gt;
lvitemhi.iItem = hi;&lt;br /&gt;
&lt;br /&gt;GetItem( &amp;amp;lvitemlo );&lt;br /&gt;
GetItem( &amp;amp;lvitemhi );&lt;br /&gt;
&lt;br /&gt;for( i=0; i&amp;lt;nColCount; i++)&lt;br /&gt;
SetItemText(lo, i, GetItemText(hi, i));&lt;br /&gt;
&lt;br /&gt;lvitemhi.iItem = lo;&lt;br /&gt;
SetItem( &amp;amp;lvitemhi );&lt;br /&gt;
&lt;br /&gt;for( i=0; i&amp;lt;nColCount; i++)&lt;br /&gt;
SetItemText(hi, i, rowText[i]);&lt;br /&gt;
&lt;br /&gt;lvitemlo.iItem = hi;&lt;br /&gt;
SetItem( &amp;amp;lvitemlo );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;8.기존에 선택되어있는 것을 해체하기&lt;br /&gt;
-----------------------------------&lt;br /&gt;
int nOldItem = GetSelectionMark();&lt;br /&gt;
if( nOldItem &amp;gt; 0 )&lt;br /&gt;
SetItemState( nOldItem , 0, LVIS_SELECTED);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT class=Apple-style-span face=Verdana&gt;&lt;FONT class=Apple-style-span color=#000000&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT style=&quot;LINE-HEIGHT: 150%&quot;&gt;&lt;FONT style=&quot;LINE-HEIGHT: 150%&quot; size=2&gt;&lt;FONT class=Apple-style-span face=Verdana&gt;&lt;FONT class=Apple-style-span color=#000000&gt;9. 리스트컨트롤내 모든 항목을 선택하기&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT style=&quot;LINE-HEIGHT: 150%&quot; size=2&gt;&lt;FONT class=Apple-style-span face=Verdana&gt;&lt;FONT class=Apple-style-span color=#000000&gt;-----------------------------------&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT style=&quot;LINE-HEIGHT: 150%&quot;&gt;&lt;FONT class=Apple-style-span face=Verdana&gt;&lt;FONT class=Apple-style-span color=#000000&gt;void OnSelectAll()&lt;br /&gt;
{&lt;br /&gt;
// Make sure the focus is set to the list view control.&lt;br /&gt;
m_list.SetFocus();&lt;br /&gt;
&lt;br /&gt;int n = 0;&lt;br /&gt;
int nLast = m_list.GetItemCount();&lt;br /&gt;
&lt;br /&gt;for (;n &amp;lt; nLast;n++)&lt;br /&gt;
{&lt;br /&gt;
m_list.SetItemState(n, LVIS_SELECTED, LVIS_SELECTED);&lt;br /&gt;
//ASSERT(m_list.GetItemState(n, LVIS_SELECTED) == LVIS_SELECTED);&lt;br /&gt;
} &lt;br /&gt;
}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT class=Apple-style-span face=Verdana&gt;&lt;FONT class=Apple-style-span color=#000000&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;FONT style=&quot;LINE-HEIGHT: 150%&quot;&gt;
&lt;DIV&gt;&lt;FONT style=&quot;LINE-HEIGHT: 150%&quot;&gt;&lt;FONT style=&quot;LINE-HEIGHT: 150%&quot; size=2&gt;&lt;FONT class=Apple-style-span face=Verdana&gt;&lt;FONT class=Apple-style-span color=#000000&gt;10. 리스트컨트롤내 모든 항목을 선택해제 하기&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT style=&quot;LINE-HEIGHT: 150%&quot; size=2&gt;&lt;FONT class=Apple-style-span face=Verdana&gt;&lt;FONT class=Apple-style-span color=#000000&gt;-----------------------------------&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;/FONT&gt;
&lt;DIV&gt;&lt;FONT style=&quot;LINE-HEIGHT: 150%&quot;&gt;&lt;FONT class=Apple-style-span face=Verdana&gt;&lt;FONT class=Apple-style-span color=#000000&gt;void OnUnSelectAll()&lt;br /&gt;
{&lt;br /&gt;
m_list.SetFocus();&lt;br /&gt;
&lt;br /&gt;// Select all of the items that are completely visible.&lt;br /&gt;
int n = 0;&lt;br /&gt;
int nLast = m_list.GetItemCount();&lt;br /&gt;
&lt;br /&gt;for (;n &amp;lt; nLast;n++)&lt;br /&gt;
{&lt;br /&gt;
//현재 선택되어 있는 항목만, 선택해제&lt;br /&gt;
if(m_list.GetItemState(n, LVIS_SELECTED) == LVIS_SELECTED){&lt;br /&gt;
m_list.SetItemState(n, 0, LVIS_SELECTED);&lt;br /&gt;
m_list.SetItemState(n, 0, LVIS_FOCUSED); //포커스 해제&lt;br /&gt;
} &lt;br /&gt;
} &lt;br /&gt;
}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT class=Apple-style-span face=Verdana&gt;&lt;FONT class=Apple-style-span color=#000000&gt;&lt;FONT style=&quot;LINE-HEIGHT: 150%&quot;&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT style=&quot;LINE-HEIGHT: 150%&quot;&gt;&lt;FONT class=Apple-style-span face=Verdana&gt;&lt;FONT class=Apple-style-span color=#000000&gt;11. 리스트컨트롤에 선택된 항목을 클립보드에 저장하기.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT style=&quot;LINE-HEIGHT: 150%&quot;&gt;&lt;FONT style=&quot;LINE-HEIGHT: 150%&quot; size=2&gt;&lt;FONT class=Apple-style-span face=Verdana&gt;&lt;FONT class=Apple-style-span color=#000000&gt;-----------------------------------&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT class=Apple-style-span face=Verdana&gt;&lt;FONT class=Apple-style-span color=#000000&gt;&lt;br /&gt;
CListCtrl m_list;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT style=&quot;LINE-HEIGHT: 150%&quot;&gt;&lt;FONT class=Apple-style-span face=Verdana&gt;&lt;FONT class=Apple-style-span color=#000000&gt;void OnSelectCopy()&lt;br /&gt;
{&lt;br /&gt;
CString str;&lt;br /&gt;
__CopyTextFromGrid(str);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT style=&quot;LINE-HEIGHT: 150%&quot;&gt;&lt;FONT class=Apple-style-span face=Verdana&gt;&lt;FONT class=Apple-style-span color=#000000&gt;__ClipCopy((LPSTR)(LPCSTR)str);&lt;br /&gt;
}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT style=&quot;LINE-HEIGHT: 150%&quot;&gt;&lt;FONT class=Apple-style-span face=Verdana&gt;&lt;FONT class=Apple-style-span color=#000000&gt;void __CopyTextFromGrid(CString&amp;amp; totalTxt)&lt;br /&gt;
{&lt;br /&gt;
int m_Cols = 2;&lt;br /&gt;
totalTxt.Empty();&lt;br /&gt;
POSITION pos = m_list.GetFirstSelectedItemPosition();&lt;br /&gt;
if (pos == NULL)&lt;br /&gt;
TRACE0(&quot;No items were selected!\n&quot;);&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
while (pos)&lt;br /&gt;
{&lt;br /&gt;
int nItem = m_list.GetNextSelectedItem(pos);&lt;br /&gt;
&lt;br /&gt;CString str;&lt;br /&gt;
str.Empty();&lt;br /&gt;
&lt;br /&gt;int i =0;&lt;br /&gt;
for(i=0; i&amp;lt;m_Cols; i++)&lt;br /&gt;
{&lt;br /&gt;
if(i==0)&lt;br /&gt;
str=m_list.GetItemText((int)nItem, i);&lt;br /&gt;
else&lt;br /&gt;
str += m_list.GetItemText((int)nItem, i);&lt;br /&gt;
str += &quot; \t&quot;;&lt;br /&gt;
}&lt;br /&gt;
str += &quot;\r\n&quot;;&lt;br /&gt;
totalTxt += str;&lt;br /&gt;
TRACE1(&quot;Item %d was selected!\n&quot;, nItem); &lt;br /&gt;
}&lt;br /&gt;
} &lt;br /&gt;
}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;FONT style=&quot;LINE-HEIGHT: 150%&quot;&gt;&lt;FONT class=Apple-style-span face=Verdana&gt;&lt;FONT class=Apple-style-span color=#000000&gt;BOOL __ClipCopy(char *txt)&lt;br /&gt;
{&lt;br /&gt;
HGLOBAL hglbCopy;&lt;br /&gt;
char* lptstrCopy; &lt;br /&gt;
&lt;br /&gt;if (!::OpenClipboard(AfxGetMainWnd()-&amp;gt;GetSafeHwnd())) &lt;br /&gt;
return FALSE; &lt;br /&gt;
EmptyClipboard(); &lt;br /&gt;
&lt;br /&gt;hglbCopy = GlobalAlloc(GMEM_MOVEABLE, strlen(txt)+1);&lt;br /&gt;
if (hglbCopy == NULL) &lt;br /&gt;
{&lt;br /&gt;
CloseClipboard(); &lt;br /&gt;
return FALSE; &lt;br /&gt;
} &lt;br /&gt;
lptstrCopy =(char*)GlobalLock(hglbCopy); &lt;br /&gt;
memcpy(lptstrCopy, txt, strlen(txt)+1); &lt;br /&gt;
//lptstrCopy[strlen(txt)] = 0;&lt;br /&gt;
GlobalUnlock(hglbCopy); &lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
SetClipboardData(CF_TEXT, hglbCopy); &lt;br /&gt;
&lt;br /&gt;CloseClipboard(); &lt;br /&gt;
return TRUE;&lt;br /&gt;
&lt;br /&gt;} &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;!--
       &lt;rdf:RDF xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;
		    xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot;
		    xmlns:trackback=&quot;http://madskills.com/public/xml/rss/module/trackback/&quot;&gt;
       &lt;rdf:Description
	        rdf:about=&quot;http://minujang.egloos.com/2254211&quot;
	        dc:identifier=&quot;http://minujang.egloos.com/2254211&quot;
	        dc:title=&quot;리스트컨트롤 작업시 유용한것들.&quot;
	        trackback:ping=&quot;http://minujang.egloos.com/tb/2254211&quot;/&gt;
       &lt;/rdf:RDF&gt;
       --&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;</description>
			<category>Windows Programming (MFC)</category>
			<author>J.K 스나이퍼</author>
			<guid>http://sanaigon.tistory.com/149</guid>
			<comments>http://sanaigon.tistory.com/149#entry149comment</comments>
			<pubDate>Wed, 30 Nov 2011 17:46:16 +0900</pubDate>
		</item>
		<item>
			<title>CTreeCtrl의 초기화(OnInitdialog)시에 SetCheck() 함수가 먹지 않는 문제</title>
			<link>http://sanaigon.tistory.com/148</link>
			<description>&lt;P&gt;TVS_CHECKBOXES 스타일을 가지고 있는 CTreeCtrl을 쓰다가 특정 값을 받아 초기화 하는 과정에서 SetCheck()함수를 통해 체크 상태로 만들려고 하는데 분명 반환 되는 값은 TRUE로 정상적으로 함수는 동작을 하였으나, Check이미지 상태로 변하지 않아서.. 한참을 고민 하였다. &lt;br /&gt;
&lt;br /&gt;구글링을 통해 검색한 결과 나와 같은 어려움을 겪는 많은 사람들이 있었는데, 그중에 가장 간단한 해결 방법이 있어 소개 하고자 한다. &lt;br /&gt;
&lt;br /&gt;사용방법은 간단 하다 OnInitDialog()함수에서 SetCheck()함수를 사용하기 전에 아래의 두줄을 라인을 입력한다. &lt;br /&gt;
&lt;br /&gt;m_ctrlTree.ModifyStyle( TVS_CHECKBOXES, 0 );&lt;br /&gt;
m_ctrlTree.ModifyStyle( 0, TVS_CHECKBOXES );&lt;br /&gt;
&lt;br /&gt;위의 함수는 윈도우 프로그래밍을 하는 사람이라면 누구나 알고 있을법한 함수로 특정 윈도우 스타일을 제거하고 추가 하는 함수이다. &lt;br /&gt;
&lt;br /&gt;이 함수를 SetCheck()함수 전에 한번 호출 해 준후에 원래 구현을 하면 기대하던 동작을 할 수 있을 것이다. &lt;br /&gt;
이유는 여러가지가 있다고는 하나 정확한 이유는 잘 모르겠다. &lt;br /&gt;
&lt;br /&gt;나와 같은 삽질하시는 분들께 도움이 됬으면 좋겠다. &lt;br /&gt;
&lt;br /&gt;참고 : &lt;A href=&quot;http://www.codeguru.com/forum/archive/index.php/t-197692.html&quot;&gt;http://www.codeguru.com/forum/archive/index.php/t-197692.html&lt;/A&gt;&lt;br /&gt;
&lt;/P&gt;</description>
			<category>Windows Programming (MFC)</category>
			<author>J.K 스나이퍼</author>
			<guid>http://sanaigon.tistory.com/148</guid>
			<comments>http://sanaigon.tistory.com/148#entry148comment</comments>
			<pubDate>Mon, 08 Aug 2011 20:17:34 +0900</pubDate>
		</item>
		<item>
			<title>시스템의 각종 상태를 파악 할 수 있는 함수 SystemParametersInfo()</title>
			<link>http://sanaigon.tistory.com/147</link>
			<description>&lt;H1&gt;&lt;A name=base.systemparametersinfo&gt;&lt;/A&gt;SystemParametersInfo Function&lt;/H1&gt;
&lt;P&gt;
&lt;P&gt;Retrieves or sets the value of one of the system-wide parameters. This function can also update the user profile while setting a parameter.&lt;/P&gt;
&lt;DIV&gt;&lt;PRE class=syntax xml:space=&quot;preserve&quot;&gt;BOOL WINAPI SystemParametersInfo(
  __in          UINT &lt;I&gt;&lt;A class=synParam href=&quot;&quot;&gt;uiAction&lt;/A&gt;&lt;/I&gt;,
  __in          UINT &lt;I&gt;&lt;A class=synParam href=&quot;&quot;&gt;uiParam&lt;/A&gt;&lt;/I&gt;,
  __in_out      PVOID &lt;I&gt;&lt;A class=synParam href=&quot;&quot;&gt;pvParam&lt;/A&gt;&lt;/I&gt;,
  __in          UINT &lt;I&gt;&lt;A class=synParam href=&quot;&quot;&gt;fWinIni&lt;/A&gt;&lt;/I&gt;
);&lt;/PRE&gt;&lt;PRE class=syntax xml:space=&quot;preserve&quot;&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=syntax xml:space=&quot;preserve&quot;&gt;현재 시스템의 상태를 파악 하고자 하는 uiAction값을 매개변수로 넘겨 주변 pvParam 값으로 현재의 상&lt;/PRE&gt;&lt;PRE class=syntax xml:space=&quot;preserve&quot;&gt;태를 넘겨받을 수 있다. &lt;/PRE&gt;&lt;PRE class=syntax xml:space=&quot;preserve&quot;&gt;출처 : &lt;A href=&quot;http://msdn.microsoft.com/en-us/library/ms724947(v=vs.85).aspx&quot;&gt;http://msdn.microsoft.com/en-us/library/ms724947(v=vs.85).aspx&lt;/A&gt;&lt;/PRE&gt;&lt;/DIV&gt;</description>
			<category>Windows Programming (MFC)</category>
			<author>J.K 스나이퍼</author>
			<guid>http://sanaigon.tistory.com/147</guid>
			<comments>http://sanaigon.tistory.com/147#entry147comment</comments>
			<pubDate>Thu, 07 Jul 2011 14:30:26 +0900</pubDate>
		</item>
		<item>
			<title>CBitmap을 이용한 비트맵 파일 로드 방법</title>
			<link>http://sanaigon.tistory.com/146</link>
			<description>&lt;PRE&gt;&lt;FONT color=#990000&gt;&lt;TT&gt;
BOOL CMyBitmap::LoadBitmap(LPCTSTR szFilename) 
{ 
	ASSERT(szFilename);
	DeleteObject();

	HBITMAP hBitmap = NULL; 
	hBitmap = (HBITMAP)LoadImage(NULL, szFilename, IMAGE_BITMAP, 0, 0, 
		LR_LOADFROMFILE | LR_CREATEDIBSECTION | LR_DEFAULTSIZE); 
	return Attach(hBitmap); 
}&lt;/TT&gt;&lt;/FONT&gt;&lt;/PRE&gt;&lt;br /&gt;</description>
			<category>Windows Programming (MFC)</category>
			<author>J.K 스나이퍼</author>
			<guid>http://sanaigon.tistory.com/146</guid>
			<comments>http://sanaigon.tistory.com/146#entry146comment</comments>
			<pubDate>Wed, 25 May 2011 10:14:10 +0900</pubDate>
		</item>
		<item>
			<title>[C/C++] DLL 메모리 문제</title>
			<link>http://sanaigon.tistory.com/145</link>
			<description>&lt;br /&gt;

&lt;P&gt;Windows는 crt를 link할때 MT/MD라는 linux에는 없는 옵션이 있습니다.&lt;br /&gt;
MT는 &lt;EM class=underline&gt;M&lt;/EM&gt;ulti-&lt;EM class=underline&gt;T&lt;/EM&gt;hreaded의 약자이며 MD는 &lt;EM class=underline&gt;M&lt;/EM&gt;ulti-Threaded &lt;EM class=underline&gt;D&lt;/EM&gt;LL의 약자입니다.&lt;br /&gt;
&lt;br /&gt;의미가 잘 와닿지 않죠?&lt;br /&gt;
&lt;br /&gt;우선 MD부터 설명하겠습니다.&lt;br /&gt;
(편의상 PE 파일 포맷을 실행 파일로 지칭하겠습니다. EXE, DLL 파일이 여기에 해당합니다.)&lt;br /&gt;
&lt;br /&gt;MD는 crt 라이브러리를 DLL로 제공하겠다는 의미입니다. 즉, 실행에 필요한 crt의 이미지는 MS가 제공하는 DLL 파일을 이용하여 실행하게 됩니다. MD로 작업을 하게 되면 실행파일이 많을 경우 crt 이미지가 각각의 파일에 존재하지 않기 때문에 MT에 비해서 파일의 사이즈가 작아지게 됩니다. 하지만 단점도 가지게 되는데 crt용 dll 파일이 설치되지 않은 곳에서는 실행파일의 독립적인 실행이 불가능 하게 됩니다.&lt;br /&gt;
&lt;br /&gt;MT는 MD의 반대로 생각하시면 됩니다. crt 라이브러리를 static library로 link 하겠다는 의미를 가지고 있으며 실행에 필요한 crt 이미지는 실행파일(EXE, DLL)에 포함시키게 됩니다. 이렇게 되면 실행 파일이 많아질 경우 각각의 파일이 crt 이미지를 포함한 사이즈가 되기 때문에 디스크 공간의 낭비가 생기게 됩니다. (현대의 hdd에서는 무의미한 수치이기도 합니다.)&lt;br /&gt;
&lt;br /&gt;그런데 MT와 MD는 이런 외형적인 차이(crt의 실행코드가 dll에 있는지의 유무)에 의해 근본적인 차이를 가지게 됩니다.&lt;br /&gt;
&lt;br /&gt;바로 crt heap&lt;SPAN style=&quot;WIDTH: 226px; FLOAT: left; HEIGHT: 196px&quot; id=callbacknestnaiadestistorycom448924&gt;&lt;/SPAN&gt;메모리의 주체가 어디에 있느냐 하는 문제입니다.&lt;br /&gt;
아래의 그림은 Test.exe가 Hello.dll과 World.dll을 load하여 실행된 상태를 그림으로 그린겁니다.&lt;br /&gt;
모든 실행파일(EXE, DLL)이 MT로 되어 있습니다. crt 이미지가 실행 파일에 포함되기 때문에 각각의 파일이 별도의 heap을 가지게 됩니다. &amp;nbsp;번호 보이시죠? 이런 구성에서는 crt heap이 3개가 됩니다.&lt;br /&gt;
&lt;/P&gt;
&lt;DIV style=&quot;TEXT-ALIGN: center; CLEAR: both&quot; class=&quot;imageblock center&quot;&gt;&lt;IMG style=&quot;CURSOR: pointer&quot; alt=&quot;사용자 삽입 이미지&quot; src=&quot;http://cfs7.tistory.com/image/19/tistory/2008/07/20/21/58/4883368b0a910&quot; width=450 height=186&gt;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;만약 Hello.dll에서 할당한 heap 메모리를 Test.exe나 World.dll에서 해제를 하려고 하면 할당한 heap이 아니라 다른 heap에서 메모리를 해제 하기 때문에 access violation이 발생하고 프로그램이 죽게 됩니다.&lt;br /&gt;
&lt;br /&gt;dll에서 할당한 메모리는 dll에서 해제를 해라는 말을 많이 들어봤을겁니다. 바로 MT 때문에 그렇습니다.&lt;br /&gt;
&lt;br /&gt;그럼 MD는 어떨까요?&lt;br /&gt;
MD는 아래의 그림처럼 하나의 DLL heap이 모든 실행파일(EXE, DLL)에서 사용되게 됩니다.&lt;br /&gt;
단지 컴파일 옵션에서 MT와 MD로 설정하는 차이로 시작했지만 실제 실행되는 모양새는 많이 다르죠?&lt;br /&gt;
&lt;/P&gt;
&lt;DIV style=&quot;TEXT-ALIGN: center; CLEAR: both&quot; class=&quot;imageblock center&quot;&gt;&lt;IMG style=&quot;CURSOR: pointer&quot; alt=&quot;사용자 삽입 이미지&quot; src=&quot;http://cfs7.tistory.com/image/31/tistory/2008/07/20/21/59/488336b665b79&quot; width=450 height=242&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;br /&gt;
이론적으로 MD로 구성된 실행파일은 heap 메모리의 생성/소멸의 위치가 문제를 발생시키지 않습니다. 이는 내가 사용하는 DLL이 MD라는 전제가 보장이 되어야 합니다. 하지만 다른 회사의 DLL을 사용한다면 이를 담보 할 수 없기 때문에 DLL에서 heap메모리의 생성/소멸은 실행 파일의 경계선을 넘나들지 않는것이 안전합니다.&lt;/P&gt;</description>
			<author>J.K 스나이퍼</author>
			<guid>http://sanaigon.tistory.com/145</guid>
			<comments>http://sanaigon.tistory.com/145#entry145comment</comments>
			<pubDate>Thu, 12 May 2011 18:12:32 +0900</pubDate>
		</item>
		<item>
			<title>WININET 정리 - 2(HTTP)</title>
			<link>http://sanaigon.tistory.com/144</link>
			<description>&lt;div id=&quot;post-view120037685173&quot; class=&quot;post-view pcol2 _param(1)&quot;&gt;
							&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;음. 순서와 상관없이 당장에 회사에서 시킨 일을 하다 보니. HTTP부터 정리 하게 되었다. &lt;/font&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;좀전에 허접 테란의 드랍십에 발렸더니 기분이 나뿌다.. 음..자기 전에 정리 끝낼 수 있을까. 젠장....기다려라 다 정리 하고 다시.. 배틀넷으로.... 훌훌...&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;----------------------------------------------&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;순서&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;----------------------------------------------&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;1. InternetOpen&lt;br /&gt;
2. InternetConnect&lt;br /&gt;
3. HttpOpenRequest&lt;br /&gt;
4. HttpSendRequest&lt;br /&gt;
5. HttpSendRequestEx&lt;br /&gt;
6. InternetQueryDataAvailable&lt;br /&gt;
7. InternetReadFile&lt;br /&gt;
8. InternetWriteFile&lt;br /&gt;
9. HttpEndRequest&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;예제...&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;----------------------------------------------&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;font style=&quot;BACKGROUND-COLOR: #a6ff4d&quot; size=&quot;2&quot;&gt;1. InternetOpen&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;----------------------------------------------&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;HINTERNET InternetOpen(&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IN LPCSTR lpszAgent,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IN DWORD dwAccessType,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IN LPCSTR lpszProxyName,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IN LPCSTR lpszProxyBypass,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IN DWORD dwFlags&lt;br /&gt;
);&lt;br /&gt;
&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot;&gt;----------------------------------------------&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;strong&gt;기본 설명 :&lt;/strong&gt; 인터넷 관련 DLL들을 초기화 한다. 이는 HTTP,FTP 모두 공통으로 사용.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;&lt;strong&gt;대충 사용 방법 :&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;----------------------------------------------&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; HINTERNET&amp;nbsp;hInternet;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; hInternet = InternetOpen(&quot;HTTPTEST&quot;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INTERNET_OPEN_TYPE_PRECONFIG, &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NULL, &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NULL,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;0);&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;----------------------------------------------&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&lt;strong&gt;인자&amp;nbsp;설명:&lt;/strong&gt; &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#0000ff&quot;&gt;lpszAgent : &lt;/font&gt;application의 이름을 넣어면 된다. 깡. 아무거나 넣어라. 구분만 되면 된다.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#0000ff&quot;&gt;dwAccessType :&lt;/font&gt; 인터넷 연결방식으로 다음과 같은 값이 있다.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#009966&quot;&gt;INTERNET_OPEN_TYPE_DIRECT :&amp;nbsp;&lt;/font&gt;Resolves all host names locally. &lt;/font&gt;&lt;/p&gt;
&lt;dt&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#009966&quot;&gt;INTERNET_OPEN_TYPE_PRECONFIG&lt;/font&gt; :&amp;nbsp;레지스트에 세팅된 값을 그대로 사용한다.&lt;/font&gt;&lt;/dt&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#009966&quot;&gt;INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY : &lt;/font&gt;Retrieves the proxy &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; or direct configuration from the registry and prevents the use of a startup &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; JScript or Internet Setup (INS) file. &lt;/font&gt;&lt;/p&gt;
&lt;dt&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#009966&quot;&gt;INTERNET_OPEN_TYPE_PROXY&lt;/font&gt; : Passes requests to the proxy unless a proxy &lt;/font&gt;
&lt;/dt&gt;&lt;dt&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bypass list is supplied and the name to be resolved bypasses the proxy. &lt;/font&gt;
&lt;/dt&gt;&lt;dt&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; In this case, the function uses&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/dt&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#0000ff&quot;&gt;lpszProxyName, lpszProxyBypass : &lt;/font&gt;Proxy를 사용할때만 사용한다 NULL넣어라.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#0000ff&quot;&gt;dwFlags :&lt;/font&gt; 인터넷 연결 속성이다. 다음 값을 같는다.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#009966&quot;&gt;INTERNET_FLAG_ASYNC :&lt;/font&gt; 비동기 방식으로 연결한다.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#009966&quot;&gt; INTERNET&lt;/font&gt;&lt;font color=&quot;#009966&quot;&gt;_FLAG_FROM_CACHE :&lt;/font&gt; 실제로 테트웍 요청을 하지 않고 캐시에서 &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#009966&quot;&gt;INTERNET_FLAG_OFFLINE :&lt;/font&gt; 요청한 파일이 없으면 에러가 발생한다.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;font style=&quot;BACKGROUND-COLOR: #a6ff4d&quot; size=&quot;2&quot;&gt;2. InternetConnect&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;----------------------------------------------&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;HINTERNET InternetConnect(&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IN HINTERNET hInternetSession,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IN LPCSTR lpszServerName,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IN INTERNET_PORT nServerPort,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IN LPCSTR lpszUsername,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IN LPCSTR lpszPassword,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IN DWORD dwService,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IN DWORD dwFlags,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IN DWORD dwContext&lt;br /&gt;
);&lt;br /&gt;
&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot;&gt;----------------------------------------------&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;strong&gt;기본 설명 :&lt;/strong&gt; HTTP,FTP,고퍼의 세션을 생성한다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;&lt;strong&gt;대충 사용 방법 :&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;----------------------------------------------&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp; HINTERNET&amp;nbsp;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot;&gt;hHttpSection;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;hHttpSection = InternetConnect(hInternet,&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &quot;www.naver.com&quot; ,&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0,&quot;&quot;,&quot;&quot;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;INTERNET_SERVICE_HTTP,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0);&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;----------------------------------------------&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&lt;strong&gt;인자&amp;nbsp;설명:&lt;/strong&gt; &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#0000ff&quot;&gt;hInternetSession :&lt;/font&gt; InternetOpen의 리튼값을 넣어라&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#0000ff&quot;&gt;lpszServerName :&lt;/font&gt; IP나 URL을 넣어라.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#0000ff&quot;&gt;nServerPort :&lt;/font&gt; TCP/IP 포트&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#009966&quot;&gt;INTERNET_DEFAULT_FTP_PORT :&lt;/font&gt; Uses the default port for FTP servers (port 21).&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#009966&quot;&gt;INTERNET_DEFAULT_GOPHER_PORT :&lt;/font&gt; Uses the default port for &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Gopher servers (port 70).&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#009966&quot;&gt;INTERNET_DEFAULT_HTTP_PORT : &lt;/font&gt;Uses the default port for HTTP servers (port 80).&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#009966&quot;&gt;INTERNET_DEFAULT_HTTPS_PORT :&lt;/font&gt; Uses the default port for HTTPS &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; servers (port 443).&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#009966&quot;&gt;INTERNET_DEFAULT_SOCKS_PORT :&lt;/font&gt; SOCKS firewall servers (port 1080).&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#009966&quot;&gt;INTERNET_INVALID_PORT_NUMBER : &lt;/font&gt;Uses the default port for the service &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; specified by &lt;i&gt;dwService&lt;/i&gt;.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#0000ff&quot;&gt;lpszUsername : &lt;/font&gt;FTP 에 사용되는 사용자 name (HTTP에서는 &quot;&quot;를 입력한다. NULL이 아니다.)&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#0000ff&quot;&gt;lpszPassword :&lt;/font&gt; FTP 에 사용되는 사용자 password (HTTP에서는 &quot;&quot;를 입력한다.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NULL이 아니다.)&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#0000ff&quot;&gt;dwService :&lt;/font&gt; 서비스의 종류&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;font color=&quot;#009966&quot;&gt;INTERNET_SERVICE_FTP &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;font color=&quot;#009966&quot;&gt;INTERNET_SERVICE_GOPHER&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#009966&quot;&gt;INTERNET_SERVICE_HTTP&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#0000ff&quot;&gt;dwFlags : &lt;/font&gt;FTP에만 사용되며 현재로서 사용할 수 있는 플래그는 &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INTERNET_FLAG_PASSIVE 밖에 없다.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#0000ff&quot;&gt;dwContext : &lt;/font&gt;비 동기 연결에 사용되는 컨텍스트 값인데 이에 관해서는 스타 이기면 &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 다시 정리 하겠다.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;font size=&quot;2&quot;&gt;
&lt;p&gt;&lt;strong&gt;&lt;font style=&quot;BACKGROUND-COLOR: #a6ff4d&quot; size=&quot;2&quot;&gt;3. HttpOpenRequest&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;----------------------------------------------&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;HINTERNET HttpOpenRequest(&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IN HINTERNET hHttpSession,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IN LPCSTR lpszVerb,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IN LPCSTR lpszObjectName,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IN LPCSTR lpszVersion,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IN LPCSTR lpszReferer,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IN LPCSTR FAR * lpszAcceptTypes,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IN DWORD dwFlags,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IN DWORD dwContext&lt;br /&gt;
);&lt;br /&gt;
&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot;&gt;----------------------------------------------&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;strong&gt;기본 설명 :&lt;/strong&gt; 서버에 전달한 요구 정보를 만든다. 실제 서버에 전달되지는 않는다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;&lt;strong&gt;대충 사용 방법 :&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;----------------------------------------------&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;HINTERNET&amp;nbsp;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot;&gt;hReq;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;hReq = HttpOpenRequest(hHttpSection, &quot;get&quot;,&quot;index.htm&quot;,NULL,NULL,NULL,0,0);&lt;/font&gt;&lt;/p&gt;


&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;----------------------------------------------&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&lt;strong&gt;인자&amp;nbsp;설명:&lt;/strong&gt; &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;hHttpRequest :&lt;/font&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot;&gt;InternetConnect&lt;/font&gt;의 리튼값을 넣어라&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;lpszVerb :&lt;/font&gt;&amp;nbsp;요구 종류 GET, PUT, POST NULL이면 GET으로 동작한다.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#0000ff&quot;&gt;lpszObjectName :&lt;/font&gt; 요구 사항으로 일반적으로 호출하고자 하는 파일 이름이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#0000ff&quot;&gt;lpszVersion :&lt;/font&gt; 버젼 정보&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#0000ff&quot;&gt;lpszReferer :&lt;/font&gt; Address of a string that specifies the address (URL) of the document &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from which the URL in the request (&lt;i&gt;lpszObjectName&lt;/i&gt;) was obtained. If this &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; parameter is NULL, no &quot;referrer&quot; is specified. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#0000ff&quot;&gt;lpszAcceptTypes :&lt;/font&gt; Address of a null-terminated array of LPCSTR pointers indicating &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; content types accepted by the client. If this parameter is NULL, no types &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; are accepted by the client. Servers interpret a lack of accept types to &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;indicate that the client accepts only documents of type &quot;text/*&quot; (that is, &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; only text documents, and not pictures or other binary files). &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#0000ff&quot;&gt;dwFlags :&lt;/font&gt;&amp;nbsp;&amp;nbsp;Internet flag values.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#0000ff&quot;&gt;dwContext :&lt;/font&gt; Application-defined value that associates &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this operation with any application data&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&lt;strong&gt;&lt;font style=&quot;BACKGROUND-COLOR: #a6ff4d&quot; size=&quot;2&quot;&gt;4. HttpSendRequest&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;font size=&quot;2&quot;&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;----------------------------------------------&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;BOOL HttpSendRequest(&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IN HINTERNET hHttpRequest,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IN LPCSTR lpszHeaders,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IN DWORD dwHeadersLength,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IN LPVOID lpOptional,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; DWORD dwOptionalLength&lt;br /&gt;
);&lt;br /&gt;
&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot;&gt;----------------------------------------------&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;strong&gt;기본 설명 :&lt;/strong&gt; 만들어진 요구 사항을 서버에 보내 준다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Header정보나 옵션 데이터를 같이 보내 줄 수 있다.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 이에 대한 정보는 알아서 찾아라. 지금은 NULL로 한다.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;&lt;strong&gt;대충 사용 방법 :&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;----------------------------------------------&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;HINTERNET&amp;nbsp;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot;&gt;hReq;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;HttpSendRequest(hReq,NULL,0,NULL,0);&lt;/font&gt;&lt;/p&gt;


&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;----------------------------------------------&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&lt;strong&gt;인자&amp;nbsp;설명:&lt;/strong&gt; &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;hHttpRequest :&lt;/font&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot;&gt;HttpOpenRequest&lt;/font&gt;의 리튼값을 넣어라&lt;/font&gt;&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#0000ff&quot;&gt;lpszHeaders :&lt;/font&gt; Additional headers to be appended to the request. This parameter can &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; be NULL if there are no additional headers to append.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#0000ff&quot;&gt;dwHeadersLength :&lt;/font&gt; Length, in characters, of the additional headers. If this parameter is &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -1L and &lt;i&gt;lpszHeaders&lt;/i&gt; is not NULL, the function assumes that &lt;i&gt;lpszHeaders&lt;/i&gt; is &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; zero-terminated (ASCIIZ), and the length is calculated&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#0000ff&quot;&gt;lpOptional :&lt;/font&gt; Address of any optional data to send immediately after the request &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;headers. This parameter is generally used for POST and PUT operations. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The optional data can be the resource or information being posted to the &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;server. This parameter can be NULL if there is no optional data to send.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#0000ff&quot;&gt;dwOptionalLength :&lt;/font&gt; Length, in bytes, of the optional data. This parameter can be zero if &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; there is no optional data to send&lt;/p&gt;
&lt;/font&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/font&gt;
&lt;p&gt;&lt;strong&gt;&lt;font style=&quot;BACKGROUND-COLOR: #a6ff4d&quot; size=&quot;2&quot;&gt;5. HttpSendRequestEx&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;----------------------------------------------&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;BOOL HttpSendRequestEx(&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IN HINTERNET hRequest,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IN LPINTERNET_BUFFERS lpBuffersIn,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; OUT LPINTERNET_BUFFERS lpBuffersOut,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IN DWORD dwFlags,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IN DWORD dwContext&lt;br /&gt;
);&lt;br /&gt;
&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot;&gt;----------------------------------------------&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;strong&gt;기본 설명 :&lt;/strong&gt; 원래의 HttpSendRequest 함수에는 큰 제한이 있습니다. 즉, 이 함수를 호출할 때 요청&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 하는 모든 데이터를 단일 버퍼에 넣어 제공해야 합니다. 이 제한 때문에 종종 불편이 따&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 르고, 특정 클라이언트 응용 프로그램에서 성능이 떨어지며, 메모리가 적은 클라이언트 &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;컴퓨터에서 많은 양의 데이터를 업로드하지 못할 수도 있습니다. 반면에 새&amp;nbsp; &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HttpSendRequestEx 함수를 이용하면 프로그램에서 요청을 시작하고, 데이터를 가능&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 한 한 작은 조각으로 나누어 전송하고 모든 데이터가 전송되었을 때 요청을 끝낼 수 있습&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 니다. 이 함수가 작동하려면 컴퓨터에 Internet Explorer 4.0이 설치되어야 있어야 합니&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;다. Microsoft 다운로드 센터에서 다음 파일을 다운로드할 수 있습니다.&lt;br /&gt;
&lt;/font&gt;&lt;/font&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;&lt;strong&gt;대충 사용 방법 :&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;----------------------------------------------&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; INTERNET_BUFFERS BufferIn;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; HINTERNET hRequest&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; BufferIn.dwStructSize = sizeof( INTERNET_BUFFERS );&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; BufferIn.Next = NULL; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; BufferIn.lpcszHeader = NULL;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; BufferIn.dwHeadersLength = 0;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; BufferIn.dwHeadersTotal = 0;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; BufferIn.lpvBuffer = NULL;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; BufferIn.dwBufferLength = 0;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; BufferIn.dwBufferTotal = dwPostSize;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; BufferIn.dwOffsetLow = 0;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; BufferIn.dwOffsetHigh = 0;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; HttpSendRequestEx( hRequest, &amp;amp;BufferIn, NULL, 0, 0);&lt;/font&gt;&lt;/p&gt;



&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;----------------------------------------------&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&lt;strong&gt;인자&amp;nbsp;설명:&lt;/strong&gt; &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;hHttpRequest :&lt;/font&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot;&gt;HttpOpenRequest&lt;/font&gt;의 리튼값을 넣어라&lt;/font&gt;&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#0000ff&quot;&gt;&lt;font size=&quot;2&quot;&gt;lpBuffersIn&lt;/font&gt; :&lt;/font&gt; Optional. Address of an INTERNET_BUFFERS structure&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#0000ff&quot;&gt;&lt;font size=&quot;2&quot;&gt;lpBuffersOut&lt;/font&gt; :&lt;/font&gt; Optional. Address of an&amp;nbsp;INTERNET_BUFFERS structure&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#0000ff&quot;&gt;&lt;font size=&quot;2&quot;&gt;dwFlags&lt;/font&gt;:&lt;/font&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#009966&quot;&gt;HSR_ASYNC :&lt;/font&gt; Identical to &lt;a target=&quot;_blank&quot; class=&quot;con_link&quot; href=&quot;mk:@MSITStore:C:Program%20FilesMicrosoft%20Visual%20StudioMSDN9898VS1042Shellcc.chm::/inet401/help/itt/wininet/constants/API_Flags.htm#WININET_API_FLAG_ASY&quot;&gt;WININET_API_FLAG_ASYNC&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#009966&quot;&gt;HSR_SYNC :&lt;/font&gt; Identical to &lt;a target=&quot;_blank&quot; class=&quot;con_link&quot; href=&quot;mk:@MSITStore:C:Program%20FilesMicrosoft%20Visual%20StudioMSDN9898VS1042Shellcc.chm::/inet401/help/itt/wininet/constants/API_Flags.htm#WININET_API_FLAG_SYN&quot;&gt;WININET_API_FLAG_SYNC&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#009966&quot;&gt;HSR_USE_CONTEXT :&lt;/font&gt; Identical to &lt;a target=&quot;_blank&quot; class=&quot;con_link&quot; href=&quot;mk:@MSITStore:C:Program%20FilesMicrosoft%20Visual%20StudioMSDN9898VS1042Shellcc.chm::/inet401/help/itt/wininet/constants/API_Flags.htm#WININET_API_FLAG_USE&quot;&gt;WININET_API_FLAG_USE_CONTEXT&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#009966&quot;&gt;HSR_INITIATE :&lt;/font&gt; Iterative operation (completed by &lt;a target=&quot;_blank&quot; class=&quot;con_link&quot; href=&quot;mk:@MSITStore:C:Program%20FilesMicrosoft%20Visual%20StudioMSDN9898VS1042Shellcc.chm::/inet401/help/itt/wininet/functions/HttpEndRequest.htm#HttpEndRequest&quot;&gt;HttpEndRequest&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#009966&quot;&gt;HSR_DOWNLOAD :&lt;/font&gt; Download resource to file.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#009966&quot;&gt;HSR_CHUNKED :&lt;/font&gt; Send chunked data.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#0000ff&quot;&gt;&lt;font size=&quot;2&quot;&gt;dwContext &lt;/font&gt;:&lt;/font&gt; DWORD variable that contains the context value to use in &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; asynchronous operations.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;font style=&quot;BACKGROUND-COLOR: #a6ff4d&quot; size=&quot;2&quot;&gt;6. InternetQueryDataAvailable&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;----------------------------------------------&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;BOOL InternetQueryDataAvailable( &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IN HINTERNET hFile,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; OUT LPDWORD lpdwNumberOfBytesAvailable,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IN DWORD dwFlags,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IN DWORD dwContext&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot;&gt;----------------------------------------------&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;strong&gt;기본 설명 :&lt;/strong&gt; &lt;font face=&quot;Times&quot;&gt;내용적으로 네크웍크카드를 통해서 들어온 데이타가 버퍼에 쌓이게 될거이고, &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;Times&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 그 버퍼의 양을 얻어내는 녀석이다. &lt;/font&gt;&lt;font face=&quot;Times&quot; size=&quot;2&quot;&gt;결국 곧바로 파일로 저장하거나 읽어낼때 이용 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;Times&quot; size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 가능한 버퍼사이즈를 얻어낸다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;&lt;strong&gt;대충 사용 방법 :&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;----------------------------------------------&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;HINTERNET&amp;nbsp;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot;&gt;hReq;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;DWORD&amp;nbsp;&amp;nbsp;size;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;InternetQueryDataAvailable(hReq, &amp;amp;size,0,0);&lt;/font&gt;&lt;/p&gt;


&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;----------------------------------------------&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&lt;strong&gt;인자&amp;nbsp;설명:&lt;/strong&gt; &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;hFile : &lt;/font&gt;&lt;font color=&quot;#333333&quot;&gt;조사할 버퍼의 핸들러 ( 여기서는 Http 요구 핼들러를 사용한다.)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#0000ff&quot;&gt;lpdwNumberOfBytesAvailable :&lt;/font&gt;&amp;nbsp;받은 데이터의&amp;nbsp;버퍼 크기&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#0000ff&quot;&gt;dwFlags :&lt;/font&gt; must be zero (사용도 안할거면서 왜 있는거야 훌훌..)&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#0000ff&quot;&gt;dwContext :&lt;/font&gt; must be zero&lt;/font&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;font style=&quot;BACKGROUND-COLOR: #a6ff4d&quot; size=&quot;2&quot;&gt;7. InternetReadFile&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;----------------------------------------------&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;BOOL InternetReadFile(&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IN HINTERNET hFile,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IN LPVOID lpBuffer,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IN DWORD dwNumberOfBytesToRead,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; OUT LPDWORD lpNumberOfBytesRead&lt;br /&gt;
);&lt;br /&gt;
&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot;&gt;----------------------------------------------&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;strong&gt;기본 설명 :&lt;/strong&gt; 이름 그대로다 Internet정보를 읽는다&lt;/font&gt;&lt;/font&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;Times&quot; size=&quot;2&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;&lt;strong&gt;대충 사용 방법 :&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;----------------------------------------------&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;HINTERNET&amp;nbsp;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot;&gt;hReq;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;DWORD&amp;nbsp;&amp;nbsp;size;&lt;/p&gt;
&lt;p&gt;DWORD&amp;nbsp;&amp;nbsp;dwRead;&lt;/p&gt;
&lt;p&gt;char&amp;nbsp;&amp;nbsp;buf[65000];&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;InternetReadFile(hReq,buf,size,&amp;amp;dwRead);&lt;/font&gt;&lt;/p&gt;


&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;----------------------------------------------&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&lt;strong&gt;인자&amp;nbsp;설명:&lt;/strong&gt; &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;hFile : &lt;/font&gt;&lt;font color=&quot;#333333&quot;&gt;조사할 버퍼의 핸들러 ( 여기서는 Http 요구 핼들러를 사용한다.)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; color=&quot;#333333&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#000000&quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;lpBuffer :&lt;/font&gt; 읽은 데이터를 저장할 버퍼&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#0000ff&quot;&gt;dwNumberOfBytesToRead :&lt;/font&gt; 읽고자 하는&amp;nbsp;데이터의 크기&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#0000ff&quot;&gt;lpNumberOfBytesRead :&lt;/font&gt;&amp;nbsp;실재 읽은 데이터의 크기&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;font style=&quot;BACKGROUND-COLOR: #a6ff4d&quot; size=&quot;2&quot;&gt;8. InternetWriteFile&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;----------------------------------------------&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;BOOL InternetWriteFile(&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IN HINTERNET hFile,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IN LPCVOID lpBuffer,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IN DWORD dwNumberOfBytesToWrite,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; OUT LPDWORD lpdwNumberOfBytesWritten&lt;br /&gt;
);&lt;br /&gt;
&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot;&gt;----------------------------------------------&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;strong&gt;기본 설명 :&lt;/strong&gt; 오픈된 인터넷 파일에 쓴다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;&lt;strong&gt;대충 사용 방법 :&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;----------------------------------------------&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;HINTERNET&amp;nbsp;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot;&gt;&lt;font size=&quot;2&quot;&gt;hRequest&lt;/font&gt;;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;DWORD&amp;nbsp;&amp;nbsp;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;dwBytesWritten&lt;/font&gt;;&lt;/p&gt;
&lt;p&gt;char&amp;nbsp;&amp;nbsp;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;pBuffer&lt;/font&gt;[1024];&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;InternetWriteFile( hRequest, pBuffer, 1024, &amp;amp;dwBytesWritten);&lt;/font&gt;&lt;/p&gt;


&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;----------------------------------------------&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&lt;strong&gt;인자&amp;nbsp;설명:&lt;/strong&gt; &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;hFile : &lt;/font&gt;&lt;font color=&quot;#333333&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;Valid handle returned from a previous call to &lt;/font&gt;&lt;a target=&quot;_blank&quot; class=&quot;con_link&quot; href=&quot;mk:@MSITStore:C:Program%20FilesMicrosoft%20Visual%20StudioMSDN9898VS1042Shellcc.chm::/inet401/help/itt/wininet/functions/FtpOpenFile.htm#FtpOpenFile&quot;&gt;FtpOpenFile&lt;/a&gt;&lt;font color=&quot;#000000&quot;&gt; or an HINTERNET&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&lt;font color=&quot;#333333&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; handle sent by &lt;/font&gt;&lt;a target=&quot;_blank&quot; class=&quot;con_link&quot; href=&quot;mk:@MSITStore:C:Program%20FilesMicrosoft%20Visual%20StudioMSDN9898VS1042Shellcc.chm::/inet401/help/itt/wininet/functions/HttpSendRequestEx.htm#HttpSendRequestEx&quot;&gt;HttpSendRequestEx&lt;/a&gt;&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; color=&quot;#333333&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#000000&quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;lpBuffer :&lt;/font&gt;&amp;nbsp; 버퍼&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#0000ff&quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;dwNumberOfBytesToWrite &lt;/font&gt;:&lt;/font&gt; 쓰고자 하는&amp;nbsp;데이터의 크기&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#0000ff&quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;lpdwNumberOfBytesWritten &lt;/font&gt;:&lt;/font&gt;&amp;nbsp;실재 쓴 데이터의 크기&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;font style=&quot;BACKGROUND-COLOR: #a6ff4d&quot; size=&quot;2&quot;&gt;9. HttpEndRequest&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;----------------------------------------------&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;HttpEndRequest(&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IN HINTERNET hRequest,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; OUT LPINTERNET_BUFFERS lpBuffersOut,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IN DWORD dwFlags,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IN DWORD dwContext&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;br /&gt;
&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot;&gt;----------------------------------------------&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;strong&gt;기본 설명 :&lt;/strong&gt;&amp;nbsp; Request를 종료한다. InternetWriteFile를 사용할 때 모든 파일이 전송되었다면&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 이를 호출 해준다.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;&lt;strong&gt;대충 사용 방법 :&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;----------------------------------------------&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;HINTERNET&amp;nbsp;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot;&gt;&lt;font size=&quot;2&quot;&gt;hRequest&lt;/font&gt;;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;HttpEndRequest(hRequest, NULL, 0, 0)&lt;/font&gt;&lt;/p&gt;


&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #f4f4f4&quot; size=&quot;2&quot;&gt;----------------------------------------------&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&lt;strong&gt;인자&amp;nbsp;설명:&lt;/strong&gt; &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;hRequest&lt;/font&gt; : &lt;/font&gt;&lt;font color=&quot;#333333&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;HINTERNET handle returned by &lt;a target=&quot;_blank&quot; class=&quot;con_link&quot; href=&quot;mk:@MSITStore:C:Program%20FilesMicrosoft%20Visual%20StudioMSDN9898VS1042Shellcc.chm::/inet401/help/itt/wininet/functions/HttpOpenRequest.htm#HttpOpenRequest&quot;&gt;HttpOpenRequest&lt;/a&gt; and sent by &lt;a target=&quot;_blank&quot; class=&quot;con_link&quot; href=&quot;mk:@MSITStore:C:Program%20FilesMicrosoft%20Visual%20StudioMSDN9898VS1042Shellcc.chm::/inet401/help/itt/wininet/functions/HttpSendRequestEx.htm#HttpSendRequestEx&quot;&gt;HttpSendRequestEx&lt;/a&gt;. &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; color=&quot;#333333&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#000000&quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;lpBuffersOut&lt;/font&gt; :&lt;/font&gt;&amp;nbsp; Address of an &lt;a target=&quot;_blank&quot; class=&quot;con_link&quot; href=&quot;mk:@MSITStore:C:Program%20FilesMicrosoft%20Visual%20StudioMSDN9898VS1042Shellcc.chm::/inet401/help/itt/wininet/structures/INTERNET_BUFFERS.htm#INTERNET_BUFFERS&quot;&gt;INTERNET_BUFFERS&lt;/a&gt; structure&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#0000ff&quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;dwFlags&lt;/font&gt; &lt;/font&gt;:&lt;/font&gt; &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#009966&quot;&gt;HSR_ASYNC :&lt;/font&gt; Identical to &lt;a target=&quot;_blank&quot; class=&quot;con_link&quot; href=&quot;mk:@MSITStore:C:Program%20FilesMicrosoft%20Visual%20StudioMSDN9898VS1042Shellcc.chm::/inet401/help/itt/wininet/constants/API_Flags.htm#WININET_API_FLAG_ASY&quot;&gt;WININET_API_FLAG_ASYNC&lt;/a&gt;.&lt;/font&gt;&lt;/p&gt;
&lt;font size=&quot;2&quot;&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#009966&quot;&gt;HSR_SYNC :&lt;/font&gt; Identical to &lt;a target=&quot;_blank&quot; class=&quot;con_link&quot; href=&quot;mk:@MSITStore:C:Program%20FilesMicrosoft%20Visual%20StudioMSDN9898VS1042Shellcc.chm::/inet401/help/itt/wininet/constants/API_Flags.htm#WININET_API_FLAG_SYN&quot;&gt;WININET_API_FLAG_SYNC&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#009966&quot;&gt;HSR_USE_CONTEXT :&lt;/font&gt; Identical to &lt;a target=&quot;_blank&quot; class=&quot;con_link&quot; href=&quot;mk:@MSITStore:C:Program%20FilesMicrosoft%20Visual%20StudioMSDN9898VS1042Shellcc.chm::/inet401/help/itt/wininet/constants/API_Flags.htm#WININET_API_FLAG_USE&quot;&gt;WININET_API_FLAG_USE_CONTEXT&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#009966&quot;&gt;HSR_INITIATE :&lt;/font&gt; Iterative operation (completed by &lt;a target=&quot;_blank&quot; class=&quot;con_link&quot; href=&quot;mk:@MSITStore:C:Program%20FilesMicrosoft%20Visual%20StudioMSDN9898VS1042Shellcc.chm::/inet401/help/itt/wininet/functions/HttpEndRequest.htm#HttpEndRequest&quot;&gt;HttpEndRequest&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#009966&quot;&gt;HSR_DOWNLOAD :&lt;/font&gt; Download resource to file.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#009966&quot;&gt;HSR_CHUNKED :&lt;/font&gt; Send chunked data.&lt;/p&gt;
&lt;/font&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#0000ff&quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;dwContext&lt;/font&gt; &lt;/font&gt;:&lt;/font&gt;&amp;nbsp;Double-word variable that contains the context value to use in &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; asynchronous operations&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;-----------------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #a6ff4d&quot;&gt;&lt;strong&gt;기본 예제&lt;/strong&gt; &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;-----------------------------------------------------------------------&lt;br /&gt;
&lt;strong&gt;다음은 API 완전정복(가남사)의 구버젼 P 1471에 있는 예제 이다.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;#include &amp;lt;windows.h&amp;gt;&lt;br /&gt;
#include &amp;lt;wininet.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;/p&gt;
&lt;p&gt;void main()&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;HINTERNET&amp;nbsp;hInternet, hHttp;&lt;br /&gt;
&amp;nbsp;HINTERNET&amp;nbsp;hReq;&lt;br /&gt;
&amp;nbsp;DWORD&amp;nbsp;&amp;nbsp;size;&lt;br /&gt;
&amp;nbsp;DWORD&amp;nbsp;&amp;nbsp;dwRead;&lt;br /&gt;
&amp;nbsp;char&amp;nbsp;&amp;nbsp;buf[65000];&lt;br /&gt;
&amp;nbsp;char&amp;nbsp;&amp;nbsp;buf2[65000]={0,};&lt;/p&gt;
&lt;p&gt;&amp;nbsp;hInternet = InternetOpen(&quot;HTTPTEST&quot;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;INTERNET_OPEN_TYPE_PRECONFIG, &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NULL, &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NULL,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0);&lt;br /&gt;
&amp;nbsp;if(hInternet == NULL)&lt;br /&gt;
&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;printf(&quot;InternetOpen error\n&quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;return;&lt;br /&gt;
&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;printf(&quot;InternetConnect\n&quot;);&lt;br /&gt;
&amp;nbsp;hHttp = InternetConnect(hInternet,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;&lt;a target=&quot;_blank&quot; class=&quot;con_link&quot; href=&quot;http://www.naver.com/&quot;&gt;www.naver.com&lt;/a&gt;&quot;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0,&quot;&quot;,&quot;&quot;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;INTERNET_SERVICE_HTTP,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0);&lt;br /&gt;
&amp;nbsp;printf(&quot;HttpOpenRequest\n&quot;);&lt;br /&gt;
&amp;nbsp;hReq = HttpOpenRequest(hHttp, &quot;get&quot;,&quot;index.htm&quot;,NULL,NULL,NULL,0,0);&lt;br /&gt;
&amp;nbsp;printf(&quot;HttpSendRequest\n&quot;);&lt;br /&gt;
&amp;nbsp;HttpSendRequest(hReq,NULL,0,NULL,0);&lt;br /&gt;
&amp;nbsp;do {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;InternetQueryDataAvailable(hReq, &amp;amp;size,0,0);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;InternetReadFile(hReq,buf,size,&amp;amp;dwRead);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;buf[dwRead] = 0;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;strcat(buf2,buf);&lt;br /&gt;
&amp;nbsp;} while(dwRead != 0);&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&amp;nbsp;printf(&quot;[%s]\n&quot;,buf2);&lt;/p&gt;
&lt;p&gt;&amp;nbsp;InternetCloseHandle(hHttp);&lt;br /&gt;
&amp;nbsp;InternetCloseHandle(hInternet);&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;-----------------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #a6ff4d&quot;&gt;&lt;strong&gt;기본 예제&lt;/strong&gt;&amp;nbsp; HttpSendRequestEx를 사용&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;-----------------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot; class=&quot;con_link&quot; href=&quot;http://support.microsoft.com/kb/177188/ko&quot;&gt;http://support.microsoft.com/kb/177188/ko&lt;/a&gt;&amp;nbsp;에서 제공하는 예제 이다.&lt;/p&gt;
&lt;p&gt;#include &amp;lt;Windows.h&amp;gt;&lt;br /&gt;
#include &amp;lt;WinINet.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;/p&gt;
&lt;p&gt;BOOL UseHttpSendReqEx(HINTERNET hRequest, DWORD dwPostSize);&lt;br /&gt;
#define BUFFSIZE 500&lt;/p&gt;
&lt;p&gt;void main( int argc, char **argv )&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;DWORD dwPostSize;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;if (argc &amp;lt; 4)&lt;br /&gt;
&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;printf(&quot;Usage: Bigpost &amp;lt;Size&amp;gt; &amp;lt;Server&amp;gt; &amp;lt;Path&amp;gt;\n&quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;printf(&quot;&amp;lt;Size&amp;gt; is the number of KB to POST\n&quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;printf(&quot;&amp;lt;Server&amp;gt; is the server to POST to\n&quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;printf(&quot;&amp;lt;Path&amp;gt; is the virtual path to POST to\n&quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;exit(0);&lt;br /&gt;
&amp;nbsp;}&lt;/p&gt;
&lt;p&gt;&amp;nbsp;if ( ((dwPostSize = strtoul(argv[1],NULL,10)) == 0) || (dwPostSize &amp;gt;= 2047999) )&lt;br /&gt;
&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;printf(&quot;%s is invalid size.&amp;nbsp; Valid sizes are from 1 to 2047999\n&quot;, argv[1]);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;exit(0);&lt;br /&gt;
&amp;nbsp;}&lt;/p&gt;
&lt;p&gt;&amp;nbsp;printf( &quot;Test of POSTing %luKB with WinInet\n&quot;, dwPostSize);&lt;/p&gt;
&lt;p&gt;&amp;nbsp;dwPostSize *= 1024;&amp;nbsp; // Convert KB to bytes&lt;/p&gt;
&lt;p&gt;&amp;nbsp;HINTERNET hSession = InternetOpen( &quot;HttpSendRequestEx&quot;, INTERNET_OPEN_TYPE_PRECONFIG,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;NULL, NULL, 0);&lt;br /&gt;
&amp;nbsp;if(!hSession)&lt;br /&gt;
&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;printf(&quot;Failed to open session\n&quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;exit(0);&lt;br /&gt;
&amp;nbsp;}&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&amp;nbsp;HINTERNET hConnect = InternetConnect(hSession, argv[2], INTERNET_DEFAULT_HTTP_PORT,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;NULL, NULL, INTERNET_SERVICE_HTTP,NULL, NULL);&lt;br /&gt;
&amp;nbsp;if (!hConnect)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;printf( &quot;Failed to connect\n&quot; );&lt;br /&gt;
&amp;nbsp;else&lt;br /&gt;
&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;HINTERNET hRequest = HttpOpenRequest(hConnect, &quot;POST&quot;, argv[3], &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;NULL, NULL, NULL, INTERNET_FLAG_NO_CACHE_WRITE, 0);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;if (!hRequest)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;printf( &quot;Failed to open request handle\n&quot; );&lt;br /&gt;
&amp;nbsp;&amp;nbsp;else&lt;br /&gt;
&amp;nbsp;&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;if(UseHttpSendReqEx(hRequest, dwPostSize))&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;char pcBuffer[BUFFSIZE];&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DWORD dwBytesRead;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf(&quot;\nThe following was returned by the server:\n&quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;do&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;dwBytesRead=0;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(InternetReadFile(hRequest, pcBuffer, BUFFSIZE-1, &amp;amp;dwBytesRead))&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pcBuffer[dwBytesRead]=0x00; // Null-terminate buffer&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf(&quot;%s&quot;, pcBuffer);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf(&quot;\nInternetReadFile failed&quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}while(dwBytesRead&amp;gt;0);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf(&quot;\n&quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;if (!InternetCloseHandle(hRequest))&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf( &quot;Failed to close Request handle\n&quot; );&lt;br /&gt;
&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;if(!InternetCloseHandle(hConnect))&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;printf(&quot;Failed to close Connect handle\n&quot;);&lt;br /&gt;
&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;if( InternetCloseHandle( hSession ) == FALSE )&lt;br /&gt;
&amp;nbsp;&amp;nbsp;printf( &quot;Failed to close Session handle\n&quot; );&lt;/p&gt;
&lt;p&gt;&amp;nbsp;printf( &quot;\nFinished.\n&quot; );&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;BOOL UseHttpSendReqEx(HINTERNET hRequest, DWORD dwPostSize)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;INTERNET_BUFFERS BufferIn;&lt;br /&gt;
&amp;nbsp;DWORD dwBytesWritten;&lt;br /&gt;
&amp;nbsp;int n;&lt;br /&gt;
&amp;nbsp;BYTE pBuffer[1024];&lt;br /&gt;
&amp;nbsp;BOOL bRet;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;BufferIn.dwStructSize = sizeof( INTERNET_BUFFERS ); // Must be set or error will occur&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; BufferIn.Next = NULL; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; BufferIn.lpcszHeader = NULL;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; BufferIn.dwHeadersLength = 0;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; BufferIn.dwHeadersTotal = 0;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; BufferIn.lpvBuffer = NULL;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; BufferIn.dwBufferLength = 0;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; BufferIn.dwBufferTotal = dwPostSize; // This is the only member used other than dwStructSize&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; BufferIn.dwOffsetLow = 0;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; BufferIn.dwOffsetHigh = 0;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(!HttpSendRequestEx( hRequest, &amp;amp;BufferIn, NULL, 0, 0))&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf( &quot;Error on HttpSendRequestEx %d\n&quot;,GetLastError() );&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return FALSE;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p&gt;&amp;nbsp;FillMemory(pBuffer, 1024, &#039;D&#039;); // Fill buffer with data&lt;/p&gt;
&lt;p&gt;&amp;nbsp;bRet=TRUE;&lt;br /&gt;
&amp;nbsp;for(n=1; n&amp;lt;=(int)dwPostSize/1024 &amp;amp;&amp;amp; bRet; n++)&lt;br /&gt;
&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;if(bRet=InternetWriteFile( hRequest, pBuffer, 1024, &amp;amp;dwBytesWritten))&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;printf( &quot;\r%d bytes sent.&quot;, n*1024);&lt;br /&gt;
&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;if(!bRet)&lt;br /&gt;
&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf( &quot;\nError on InternetWriteFile %lu\n&quot;,GetLastError() );&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return FALSE;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(!HttpEndRequest(hRequest, NULL, 0, 0))&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf( &quot;Error on HttpEndRequest %lu \n&quot;, GetLastError());&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return FALSE;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p&gt;&amp;nbsp;return TRUE;&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;-----------------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #a6ff4d&quot;&gt;&lt;strong&gt;기본 예제&lt;/strong&gt;&amp;nbsp; URL이 존재하는지 확인&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;-----------------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;bool&lt;br /&gt;
cs_util_http_test&amp;nbsp;&amp;nbsp;(const char*&amp;nbsp;pURL,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; const char*&amp;nbsp;pObjectName)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;HINTERNET&amp;nbsp;hInternet, hHttp;&lt;br /&gt;
&amp;nbsp;HINTERNET&amp;nbsp;hReq;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;/*--------------------------------------------------------------------*/&lt;br /&gt;
&amp;nbsp;/* precondition&lt;br /&gt;
&amp;nbsp; */&lt;br /&gt;
&amp;nbsp;/*--------------------------------------------------------------------*/&lt;br /&gt;
&amp;nbsp;if( (pURL &amp;nbsp;&amp;nbsp;&amp;nbsp;== NULL) ||&lt;br /&gt;
&amp;nbsp;&amp;nbsp;(pObjectName &amp;nbsp;== NULL))&lt;br /&gt;
&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;return false;&lt;br /&gt;
&amp;nbsp;}&lt;/p&gt;
&lt;p&gt;&amp;nbsp;/*--------------------------------------------------------------------*/&lt;br /&gt;
&amp;nbsp;hInternet = InternetOpen(&quot;HTTPTEST&quot;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;INTERNET_OPEN_TYPE_PRECONFIG, &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NULL, &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NULL,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0);&lt;br /&gt;
&amp;nbsp;if(hInternet == NULL)&lt;br /&gt;
&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;return false;&lt;br /&gt;
&amp;nbsp;}&lt;/p&gt;
&lt;p&gt;&amp;nbsp;hHttp = InternetConnect(hInternet,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pURL,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0,&quot;&quot;,&quot;&quot;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;INTERNET_SERVICE_HTTP,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0);&lt;br /&gt;
&amp;nbsp;hReq = HttpOpenRequest(hHttp, &quot;GET&quot;,pObjectName,NULL,NULL,NULL,0,0);&lt;br /&gt;
&amp;nbsp;if(hReq == NULL)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;return false;&lt;br /&gt;
&amp;nbsp;if(!HttpSendRequest(hReq,NULL,0,NULL,0))&lt;br /&gt;
&amp;nbsp;&amp;nbsp;return false;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;/*--------------------------------------------------------------------*/&lt;br /&gt;
&amp;nbsp;DWORD&amp;nbsp;&amp;nbsp;size&amp;nbsp;= 0;&lt;br /&gt;
&amp;nbsp;DWORD&amp;nbsp;&amp;nbsp;dwRead&amp;nbsp;= 0;&lt;br /&gt;
&amp;nbsp;DWORD&amp;nbsp;&amp;nbsp;dwTotal = 0;&lt;br /&gt;
&amp;nbsp;char&amp;nbsp;&amp;nbsp;sBuf[20];&lt;br /&gt;
&amp;nbsp;do {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;//InternetQueryDataAvailable(hReq, &amp;amp;size,0,0);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;InternetReadFile(hReq, sBuf, 10, &amp;amp;dwRead);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;dwTotal += dwRead;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;printf(&quot;%s&quot;,sBuf);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;if(dwTotal&amp;gt;10)break;&lt;br /&gt;
&amp;nbsp;} while(dwRead != 0);&lt;/p&gt;
&lt;p&gt;&amp;nbsp;InternetCloseHandle(hHttp);&lt;br /&gt;
&amp;nbsp;InternetCloseHandle(hInternet);&lt;/p&gt;
&lt;p&gt;&amp;nbsp;if(dwTotal &amp;gt; 10)&lt;br /&gt;
&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;return true;&lt;br /&gt;
&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;return false;&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;출처 : &lt;a title=&quot;[http://blog.naver.com/tija98/120037685173]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://blog.naver.com/tija98/120037685173&quot;&gt;http://blog.naver.com/tija98/120037685173&lt;/a&gt;&lt;br /&gt;
&lt;/p&gt;
						&lt;/div&gt;</description>
			<category>Network Programming</category>
			<author>J.K 스나이퍼</author>
			<guid>http://sanaigon.tistory.com/144</guid>
			<comments>http://sanaigon.tistory.com/144#entry144comment</comments>
			<pubDate>Mon, 11 Apr 2011 17:34:03 +0900</pubDate>
		</item>
		<item>
			<title>중복실행 방지를 위한 코드 (Dialog Base 기반 일 경우)</title>
			<link>http://sanaigon.tistory.com/143</link>
			<description>&lt;P&gt;&lt;br /&gt;
중복 실행 방지를 위해서는 많은 방법이 있겠지만. 흔히 사용하는 방법으로는 Mutext를 이용한 방법이 있다. &lt;br /&gt;
윈도우를 생성할때 WNDCLASS 구조체의 ClassName과 같은 Mutext가 자동적으로 생성이 된다. &lt;br /&gt;
&lt;br /&gt;그러므로 어플리케이션 실행 시에 CreateMutext를 이용해&amp;nbsp;Window Class Name과 똑같은 이름으로 생성을 시도 할때 나오는&amp;nbsp;ErrorCode값(&amp;nbsp;GetLastError()를 이용)이&amp;nbsp;&lt;STRONG&gt; ERROR_ALREADY_EXISTS&lt;/STRONG&gt; 값이 나온다면&amp;nbsp;&lt;br /&gt;
이미&amp;nbsp;프로그램은 실행이 되고 있음을 알수가 있다.&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;다음의 짧은 예로 중복 실행을 허용하지 않는 프로그램을 만들 수 있다.&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;&lt;SPAN style=&quot;FONT-SIZE: 18pt&quot;&gt;1.&amp;nbsp;Window Class Name 등록&amp;nbsp;&lt;/SPAN&gt;&lt;br /&gt;
&lt;br /&gt;Window&amp;nbsp;Class Name을 &amp;nbsp;등록하기 위해서는 시작시에 WNDCLASS 구조체 정보를 얻어와 변경 후 다시 WNDCLASS를 등록 해 주어야 한다. &lt;br /&gt;
&lt;br /&gt;우선 프로젝트의 rc 파일을 열어 클래스 네임을 강제 등록 해줘야 하는 작업이 필요 하다. &lt;/P&gt;
&lt;DIV style=&quot;BORDER-BOTTOM: #9fd331 1px solid; BORDER-LEFT: #9fd331 1px solid; PADDING-BOTTOM: 10px; BACKGROUND-COLOR: #e7fdb5; PADDING-LEFT: 10px; PADDING-RIGHT: 10px; BORDER-TOP: #9fd331 1px solid; BORDER-RIGHT: #9fd331 1px solid; PADDING-TOP: 10px&quot; class=txc-textbox&gt;
&lt;P&gt;/////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
//&lt;br /&gt;
// Dialog&lt;br /&gt;
//&lt;/P&gt;
&lt;P&gt;IDD_HVRENV_DIALOG DIALOGEX 0, 0, 468, 294&lt;br /&gt;
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU&lt;br /&gt;
EXSTYLE WS_EX_APPWINDOW&lt;br /&gt;
CAPTION &quot;TestDlg&quot;&lt;br /&gt;
&lt;STRONG&gt;CLASS &quot;TestDlg&quot;&lt;br /&gt;
&lt;/STRONG&gt;FONT 8, &quot;MS Shell Dlg&quot;, 0, 0, 0x1&lt;br /&gt;
BEGIN&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; PUSHBUTTON&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &quot;취소&quot;,IDCANCEL,412,271,50,16&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; DEFPUSHBUTTON&amp;nbsp;&amp;nbsp; &quot;적용&quot;,IDAPPLY,358,271,50,16&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; CONTROL&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &quot;&quot;,IDC_ENVITEMWND,&quot;Static&quot;,SS_BLACKFRAME | NOT WS_VISIBLE,7,7,137,135&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; CONTROL&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &quot;&quot;,IDC_ENV_UI_FRAME,&quot;Static&quot;,SS_BLACKFRAME,152,7,309,260,WS_EX_ACCEPTFILES&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; DEFPUSHBUTTON&amp;nbsp;&amp;nbsp; &quot;확인&quot;,IDOK,304,271,50,16&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; CONTROL&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 131,IDC_STATIC,&quot;Static&quot;,SS_BITMAP,61,191,33,31&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; DEFPUSHBUTTON&amp;nbsp;&amp;nbsp; &quot;기본값&quot;,ID_LOAD_DEFAULT,152,271,50,16&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; DEFPUSHBUTTON&amp;nbsp;&amp;nbsp; &quot;모두 기본값&quot;,ID_LOAD_ALLDEFAULT,7,271,70,16&lt;br /&gt;
END&lt;/P&gt;&lt;br /&gt;
&lt;/DIV&gt;
&lt;P&gt;&lt;br /&gt;
rc 파일을 열게 되면 위와 같이 리소스 관련 값들이 자동으로 정의 되어 있는데. 그 중 Dialog 부분에서 &lt;br /&gt;
&lt;STRONG&gt;CLASS &quot;클래스네임&quot; &lt;/STRONG&gt;을 정의 해 준다. &lt;br /&gt;
&lt;br /&gt;위의 작업이 끝나면 CWinApp 클래스를 상속받은 프로젝트의 &lt;STRONG&gt;Application Class의 InitInstance()&lt;/STRONG&gt; 함수에 &lt;br /&gt;
윈도우 클래스 구조체 정보를 변경해 주는 작업을 해야 한다. &lt;/P&gt;
&lt;DIV style=&quot;BORDER-BOTTOM: #9fd331 1px solid; BORDER-LEFT: #9fd331 1px solid; PADDING-BOTTOM: 10px; BACKGROUND-COLOR: #e7fdb5; PADDING-LEFT: 10px; PADDING-RIGHT: 10px; BORDER-TOP: #9fd331 1px solid; BORDER-RIGHT: #9fd331 1px solid; PADDING-TOP: 10px&quot; class=txc-textbox&gt;
&lt;P&gt;&lt;STRONG&gt;//////////////////////////////////////////////////////////////////////////&lt;br /&gt;
&amp;nbsp;// WinClass Name 변경 &lt;br /&gt;
&amp;nbsp;WNDCLASS wc;&lt;br /&gt;
&amp;nbsp;::GetClassInfo(AfxGetInstanceHandle(), _T(&quot;#32770&quot;), &amp;amp;wc);&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;wc.lpszClassName = rc파일에서 입력한 CLASS NAME;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;if( AfxRegisterClass(&amp;amp;wc) == FALSE )&lt;br /&gt;
&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;TRACE(&quot;Class Registration Failed\n&quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;return FALSE;&lt;br /&gt;
&amp;nbsp;}&lt;/STRONG&gt;&lt;/P&gt;&lt;/DIV&gt;
&lt;P&gt;GetClassInfo를 이용해 현재 등록된 WNDCLASS 정보를 가져온다. 이 때 파라미터로&amp;nbsp; &lt;STRONG&gt;인스턴스 핸들, 클래스네임, WNDCLASS 정보를 받을 WNDCLASS 구조체 포인터&lt;/STRONG&gt; 이렇게 3가지를 요구하게 되는데, &lt;br /&gt;
두번째 파라미터인 클래스 네임은 Dialog Base 기반일 시에 &lt;STRONG&gt;#32770&lt;/STRONG&gt;을 사용하면 된다. &lt;br /&gt;
&lt;br /&gt;얻어온 WNDCLASS 구조체에서 lpszClassName을 rc파일에 넣어준 클래스 이름으로 변경 하고 &lt;br /&gt;
AfxRegisterClass()를 이용해 다시 등록해주면 된다. &lt;br /&gt;
&lt;br /&gt;&lt;SPAN style=&quot;FONT-SIZE: 18pt&quot;&gt;2. 중복 체크 &lt;/SPAN&gt;&lt;br /&gt;
&lt;br /&gt;이렇게 등록이 된 프로그램이 실행 된다면 자동적으로 Window Class Name과 같은 Mutex를 생성하게 된다. &lt;br /&gt;
이제 중복 체크를 위해서 CreateMutex() 같은 이름으로 Mutex를 생성하려고 시도 하면 현재 프로그램이 실행중인지 아닌지를 체크 할 수 있다. &lt;/P&gt;
&lt;DIV style=&quot;BORDER-BOTTOM: #9fd331 1px solid; BORDER-LEFT: #9fd331 1px solid; PADDING-BOTTOM: 10px; BACKGROUND-COLOR: #e7fdb5; PADDING-LEFT: 10px; PADDING-RIGHT: 10px; BORDER-TOP: #9fd331 1px solid; BORDER-RIGHT: #9fd331 1px solid; PADDING-TOP: 10px&quot; class=txc-textbox&gt;
&lt;P&gt;&lt;STRONG&gt;HWND&amp;nbsp;&amp;nbsp;&amp;nbsp; hRunApp = NULL;&lt;br /&gt;
&amp;nbsp;HANDLE&amp;nbsp; hMutex = ::CreateMutex( NULL, TRUE,&amp;nbsp;뮤텍스네임 );&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;if( ::GetLastError() == ERROR_ALREADY_EXISTS )&lt;br /&gt;
&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp; hRunApp = ::FindWindow( 윈도우 클래스 네임, NULL );&lt;br /&gt;
&amp;nbsp;&amp;nbsp; if( hRunApp != NULL )&lt;br /&gt;
&amp;nbsp;&amp;nbsp; {&amp;nbsp;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;::SetForegroundWindow(hRunApp);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ::ShowWindow(hRunApp, SW_SHOWNORMAL );&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;::SetActiveWindow(hRunApp);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
}&lt;/STRONG&gt;&lt;/P&gt;&lt;/DIV&gt;&lt;br /&gt;
위의 코드는 Window Class Name과 같은 Mutex를 생성하려고 시도 하고 ErrorCode값이 &lt;STRONG&gt;ERROR_ALREADY_EXISTS값이&lt;/STRONG&gt; 나왔을 경우(이미 실행되었을 경우) 이미 실행중인 프로그램을 최상위로 보여주는 코드이다. &lt;br /&gt;
&lt;br /&gt;위와 같은 절차로 중복 실행일 경우 이미 실행된 창을 윈도우상의&amp;nbsp;최상단의 위치로 이동 시키므로서 중복실행을 막을 수 있다. &lt;br /&gt;
&lt;br /&gt;</description>
			<category>Windows Programming (MFC)</category>
			<author>J.K 스나이퍼</author>
			<guid>http://sanaigon.tistory.com/143</guid>
			<comments>http://sanaigon.tistory.com/143#entry143comment</comments>
			<pubDate>Tue, 23 Feb 2010 11:59:00 +0900</pubDate>
		</item>
		<item>
			<title>extern &quot;C&quot;에 대란 간략한 설명</title>
			<link>http://sanaigon.tistory.com/142</link>
			<description>&lt;br /&gt;
DLL에서 외부로 보여지는 Export 함수 에 보면 가끔 이런 키워드 가 붙어 있는 경우가 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;DIV style=&quot;BORDER-BOTTOM: #79a5e4 1px solid; BORDER-LEFT: #79a5e4 1px solid; PADDING-BOTTOM: 10px; BACKGROUND-COLOR: #dbe8fb; PADDING-LEFT: 10px; PADDING-RIGHT: 10px; BORDER-TOP: #79a5e4 1px solid; BORDER-RIGHT: #79a5e4 1px solid; PADDING-TOP: 10px&quot; class=txc-textbox&gt;&lt;STRONG&gt;extern &quot;C&quot; __declspec(dllexport)&lt;br /&gt;
&lt;br /&gt;혹은 &lt;br /&gt;
&lt;br /&gt;#ifdef __cplusplus&lt;br /&gt;
exretn &quot;C&quot;&lt;br /&gt;
{&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;DLL Export 함수 구현 내용 &lt;br /&gt;
&lt;br /&gt;#ifdef __cplusplus&lt;br /&gt;
}&lt;br /&gt;
#endif&lt;/STRONG&gt;&lt;br /&gt;
&lt;/DIV&gt;&lt;br /&gt;
이는 C형태의 코드를 C++ 컴파일러가 맹글링 하는것을 방지 하기 위한 코드이다. &lt;br /&gt;
&lt;br /&gt;&lt;STRONG&gt;&lt;SPAN style=&quot;FONT-SIZE: 24pt&quot;&gt;맹글링이란??&lt;/SPAN&gt;&lt;br /&gt;
&lt;/STRONG&gt;&lt;br /&gt;
만약 int print()라는 함수가 있다고 가정할때 C컴파일러로 컴파일을 하면 Object file에 &lt;STRONG&gt;_print&lt;/STRONG&gt;라는 함수이름으로 들어간다. C에서는 똑같은 함수를 사용할 수 없으므로 특별히 함수이름에 대한 변경이 일어나지 않는다. &lt;br /&gt;
&lt;br /&gt;하지만 만약 똑같은 코드를 C++ 컴파일러로 컴파일을 하게 되는 경우 Object file에&lt;STRONG&gt; ?print!@@YABX&lt;/STRONG&gt; 라는&amp;nbsp;이상한 이름으로 들어가게 된다 이는 C++의 특징인 오버로딩의 특징 때문이다.&amp;nbsp;&lt;br /&gt;
C++에서는&amp;nbsp;함수 이름이 똑같을 수도 있기 때문에 함수 이름을 구분지어 줄 필요가 있다.&amp;nbsp;컴파일러가&amp;nbsp;이렇게 함수 이름에 대해 구분 짓는 작업을 &lt;STRONG&gt;맹글링&lt;/STRONG&gt; 이라고 한다.&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;특히 위와 같이 DLL 에서는 Export 하는 함수명들은 맹글이 되서는 안되기 때문에 &lt;STRONG&gt;extern &quot;C&quot;&lt;/STRONG&gt;를 사용해서 스코프 안의 영역에 대해서는 C의 형태로 컴파일을 하라는 것을 컴파일러에게 알려 함수명이 맹글이 되는 것을 방지 해 줘야 한다. &lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;</description>
			<category>C++</category>
			<author>J.K 스나이퍼</author>
			<guid>http://sanaigon.tistory.com/142</guid>
			<comments>http://sanaigon.tistory.com/142#entry142comment</comments>
			<pubDate>Tue, 23 Feb 2010 09:41:35 +0900</pubDate>
		</item>
		<item>
			<title>Windows 환경에서 Cygwin을 이용한 Objective-C 언어 컴파일 하기</title>
			<link>http://sanaigon.tistory.com/140</link>
			<description>&lt;br /&gt;
Mac Application이 사용하는 기본언어는 C에서 발전 시킨 Objective-C라는 언어이다. 이 언어는 gcc 컴파일러 기준에서 돌아가므로 윈도우 환경에서 Visual Studio를 사용해서 컴파일 해 볼 수 없다. &lt;br /&gt;
대신 gcc가 설치 된 리눅스에서 Objective-C로 구성된 소스들을 컴파일 해 볼 수 있으나, Windows 환경 기반에서는 리눅스를 VM ware나 기타 다른 가상머신을 이용해 돌리는 것도 귀찮은 일 중 하나가 될 수 있다. &lt;br /&gt;
&lt;br /&gt;이 때 사용하기 편리한 환경이 바로 Cygwin이다. &lt;br /&gt;
&lt;br /&gt;Cygwin은 Widows에서 마치 리눅스 마냥 사용할 수 있는 환경을 제공해 준다. 리눅스를 설치 할 필요 없이 간단하게 Windows에서 Objective-C를 공부 하고자 한다면, Cygwin을 설치를 통해 컴파일 환경을 구성 하면 될 것이다. &lt;br /&gt;
&lt;br /&gt;그렇다면 Windows에 Cygwin 설치 부터 Objective-C를 이용한 샘플 코드 컴파일 까지 환경을 따라해 보자 &lt;br /&gt;
&lt;br /&gt;&lt;SPAN style=&quot;FONT-SIZE: 18pt&quot;&gt;&lt;STRONG&gt;1. Cygwin 설치 &lt;/STRONG&gt;&lt;/SPAN&gt;&lt;br /&gt;
&lt;br /&gt;우선 Cygwin 다운 로드는 다음에서 다운 로드 한다.&amp;nbsp; &lt;br /&gt;

&lt;DIV style=&quot;MARGIN-LEFT: 4em&quot;&gt;&lt;A title=&quot;[http://www.cygwin.com/]로 이동합니다.&quot; href=&quot;http://www.cygwin.com/&quot; target=_blank&gt;여기에서 다운로드 하세요 &lt;/A&gt;&lt;br /&gt;
&lt;/DIV&gt;
&lt;DIV&gt;&lt;br /&gt;
메인 페이지에서 다음과 같은 그림을 찾고 링크를 클릭 하면 Cywin의 Setup.exe 파일을 다운로드 받을 수있다. &lt;br /&gt;
&lt;/DIV&gt;
&lt;DIV&gt;&lt;br /&gt;
&lt;/DIV&gt;
&lt;P&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile24.uf.tistory.com/original/1642F8134B6AAFED022586&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile24.uf.tistory.com/image/1642F8134B6AAFED022586&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;K-1.jpg&quot; height=&quot;137&quot; width=&quot;142&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
다운 로드 받을 적절한 ftp 서버를 고른 후 다음 설치를 진행 시킨다. &lt;br /&gt;
&lt;br /&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile22.uf.tistory.com/original/1468BC144B6AB0B1AD6859&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile22.uf.tistory.com/image/1468BC144B6AB0B1AD6859&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;K-4.jpg&quot; height=&quot;389&quot; width=&quot;542&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
중간 정도 설치가 진행이 되면 다음과 같이 &quot;Select Packages&quot; 화면이 나오게 된다. &lt;br /&gt;
이는 리눅스 환경을 구성하면서 기본적으로 설치 되어야 할 패키지 들에 대해 Cygwin 설치를 하면서 같이 동시에 진행 해주게 된다. &lt;br /&gt;
&lt;br /&gt;Objective-C를 컴파일 하기 위해서는 다음과 같은 패키지가 필요 하므로 기본 적으로 Skip으로 되어 있는 해당 패키지를 선택하고 다음을 클릭한다. &lt;br /&gt;
&lt;/P&gt;
&lt;DIV style=&quot;BORDER-BOTTOM: #9fd331 1px solid; BORDER-LEFT: #9fd331 1px solid; PADDING-BOTTOM: 10px; BACKGROUND-COLOR: #e7fdb5; PADDING-LEFT: 10px; PADDING-RIGHT: 10px; BORDER-TOP: #9fd331 1px solid; BORDER-RIGHT: #9fd331 1px solid; PADDING-TOP: 10px&quot; class=txc-textbox&gt;
&lt;P style=&quot;MARGIN-LEFT: 4em&quot;&gt;&lt;STRONG&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt&quot;&gt;[Devel] 항목 아래 3개의 패키지를 선택 &lt;/SPAN&gt;&lt;br /&gt;
&lt;br /&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt&quot;&gt;gcc-core: C compiler&amp;nbsp;&amp;nbsp;&amp;nbsp; C 컴파일러 &lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 10pt&quot;&gt;gcc-g++: C++ compiler&amp;nbsp;&amp;nbsp; C++ 컴파일러 (선택 사항)&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 10pt&quot;&gt;gcc-objc: ObjC compiler Objective-C 컴파일러 &lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/DIV&gt;
&lt;P&gt;위의 3가지 패키지를 선택 한 후 다음을 누르면 설치가 진행이 되면서 Windows 내의 Cygwin 환경이 구성이 된다. &lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;STRONG&gt;&lt;SPAN style=&quot;FONT-SIZE: 18pt&quot;&gt;2. 샘플 코드 작성 및 컴파일 &lt;/SPAN&gt;&lt;br /&gt;
&lt;/STRONG&gt;&lt;br /&gt;
윈도우 메모장, 혹은 Cygwin 내의 Vi 에디터( &quot;Select Packages&quot;에서 선택 설치)를 통해 다음과 같은 Sample Code를 만든다. &lt;br /&gt;
&lt;br /&gt;&amp;lt;Hello.m&amp;gt;&lt;/P&gt;
&lt;DIV style=&quot;BORDER-BOTTOM: #9fd331 1px solid; BORDER-LEFT: #9fd331 1px solid; PADDING-BOTTOM: 10px; BACKGROUND-COLOR: #e7fdb5; PADDING-LEFT: 10px; PADDING-RIGHT: 10px; BORDER-TOP: #9fd331 1px solid; BORDER-RIGHT: #9fd331 1px solid; PADDING-TOP: 10px&quot; class=txc-textbox&gt;
&lt;P style=&quot;MARGIN-LEFT: 4em&quot;&gt;&lt;STRONG&gt;#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#import &amp;lt;Objc/Object.h&amp;gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P style=&quot;MARGIN-LEFT: 4em&quot;&gt;&lt;STRONG&gt;@interface Hello : Object &lt;br /&gt;
-(void)showHello;&lt;br /&gt;
@end&lt;/STRONG&gt;&lt;/P&gt;
&lt;P style=&quot;MARGIN-LEFT: 4em&quot;&gt;&lt;STRONG&gt;@implementation Hello&lt;br /&gt;
-(void)showHello;&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;printf(&quot;Hello Objective-c\n&quot;);&lt;br /&gt;
}&lt;br /&gt;
@end&lt;/STRONG&gt;&lt;/P&gt;
&lt;P style=&quot;MARGIN-LEFT: 4em&quot;&gt;&lt;STRONG&gt;int main()&lt;br /&gt;
{&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; id obj = [Hello alloc];&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;[obj showHello];&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;return 0;&lt;br /&gt;
}&lt;/STRONG&gt;&lt;/P&gt;&lt;/DIV&gt;
&lt;P&gt;위와 같이 작성한 코드를 저장 후 gcc 컴파일로 다음과 같이 컴파일 한다. &lt;br /&gt;
&lt;br /&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile9.uf.tistory.com/original/202ED01A4B6AB62955E05E&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile9.uf.tistory.com/image/202ED01A4B6AB62955E05E&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;K-12.jpg&quot; height=&quot;35&quot; width=&quot;307&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
위와 같이 컴파일 옵션을 주고 컴파일을 하게 되면 다음과 같이 실행 파일이 존재하게 된다. &lt;br /&gt;
컴파일 옵션 중 -v 는 컴파일 과정을 보여 달라. -o는 gcc의 목적코드 빌드를 하고자 할 때 주는 옵션이다. &lt;br /&gt;
마지막 -lobjc 옵션을 줌으로 서 Objective-C언어로 컴파일 하라는 것을 알려준다. &lt;br /&gt;
&lt;br /&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile27.uf.tistory.com/original/192ED01A4B6AB62A5686C9&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile27.uf.tistory.com/image/192ED01A4B6AB62A5686C9&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;K-13.jpg&quot; height=&quot;35&quot; width=&quot;307&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
컴파일을 통해 만든 실행 파일을 실행 해 보면 코드 컴파일은 물론 빌드 까지 잘 수행 되었음을 확인 할 수 있다. &lt;br /&gt;
&lt;br /&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile5.uf.tistory.com/original/202ED01A4B6AB62A572D94&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile5.uf.tistory.com/image/202ED01A4B6AB62A572D94&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;K-14.jpg&quot; height=&quot;80&quot; width=&quot;302&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/P&gt;
&lt;P&gt;이제 메모장과 Cygwin 환경만 있으면 얼마든지 Objective-C 언어를 이용한 프로그램을 개발 할 수 있다. &lt;br /&gt;
&lt;br /&gt;&lt;/P&gt;</description>
			<category>Mac Application</category>
			<author>J.K 스나이퍼</author>
			<guid>http://sanaigon.tistory.com/140</guid>
			<comments>http://sanaigon.tistory.com/140#entry140comment</comments>
			<pubDate>Thu, 04 Feb 2010 21:01:57 +0900</pubDate>
		</item>
	</channel>
</rss>

