c++ 8

함수 호출 방식(cdecl, stdcall, pascal)

함수 호출 방식(cdecl, stdcall, pascal) 1.인수를 스택에 집어넣는 방향에 따라서 다음과 같이 나뉘고 pascal : 인수를 스택에 저장하는 순서를 왼쪽에서 오른쪽으로 한다. cdecl : 인수를 스택에 저장하는 순서를 오른쪽에서 왼쪽으로 한다. stdcall : 인수를 스택에 저장하는 순서를 오른쪽에서 왼쪽으로 한다. 2.스택에 인수를 pop 하는 주체에 따라서 다음과 같이 나뉘고. pascal : 호출을 당하는 쪽이 스택공간을 삭제한다. stdcall : 호출을 당하는 쪽이 스택공간을 삭제한다. cdecl : 호출을 하는 쪽이 스택공간을 삭제한다. 이렇게 stdcall은 pascal방식과 cdecl방식을 혼합한 형태를 띄운다

Windows Programming 2008.02.15

유니코드&UTF-8 텍스트를 파일로 저장하기

//UNICODE 로 저장하기 TCHAR szPath[] = _T("1234567890"); int nLen = _tcslen(szPath); CFile file(_T("D:\\Down\\test.xml"), CFile::modeCreate|CFile::modeWrite); TCHAR szTmp[2]; WORD wd = 0xfeff; memcpy(szTmp, &wd, 2); file.Write(szTmp, 2); file.Write(szPath, nLen*sizeof(TCHAR)); file.Close(); 여기서 핵심은 FEFF 이다. 유니코드의 식별자란 것인데, 파일의 처음부분에 넣어주면 유니코드라고 선언하는 셈이 된다. (원래 규격은 FFFE 일것이지만, IBM PC 는 리틀엔디언 방식이므로 바이트..

Windows Programming 2008.01.25

유니코드 <-> 멀티바이트 변환 편리하게 하기

USES_CONVERSION; W2A : 유니코드 -> 멀티바이트 A2W : 멀티바이트 -> 유니코드 이상은 ATL 3.0 에 포함된 기능. (따로 헤더를 인클루드 해야 하는지 알 수 없다. 그냥 됐으니까 ㅡ_ㅡ;) 그리고 Visual Studio 6 에서 사용 가능한지 테스트 안 해 봤음. 될거라 생각됨) (수정: atlconv.h 인클루드 하면 된다고 함) 그리고 반드시, USES_CONVERSION 라는 매크로를 선언해야 한다. 컨버팅에 필요한 임시변수들이 선언되어 있다. 매크로 선언할 필요 없이 바로 쓰는것도 있다. 이것은 ATL 7.0 의 기능이다. (Visual Studio .Net 이후 버전부터 사용 가능) CA2W(멀티바이트문자열); // A2W 와 같은 기능 CW2A(유니코드문자열); /..

Windows Programming 2007.11.26

텍스트 클립보드

클립보드에 넣고 & 가져오는 함수 샘플입니다. BOOL CTestDlgDlg::SetClipboardText(const CString& strData) { BOOL bRtn = FALSE; // 클립보드 열고 bRtn = OpenClipboard(); // 클립보드 비우고 bRtn = EmptyClipboard(); ////////////////////////////////////////////////////////////////////////// /// 글로벌로 memory 잡고 HGLOBAL hglb; LPTSTR lptstr; int cch = strData.GetLength(); hglb = GlobalAlloc(GMEM_MOVEABLE, (cch + 1) * sizeof(TCHAR)); if(h..

Windows Programming 2007.05.23