헬마입니다.

정말 한동안 손놓고 있다가 조금 더 작업했습니다.


하루에 함수 몇개씩만 했어도 벌써 작업이 끝났을텐데 하는 생각이 드네요.

이번에 W로 시작하는 창관리쪽 함수 한글화가 완료되었습니다.




댓글을 달아 주세요

  1. jucke 2009.06.17 10:19 Address Modify/Delete Reply

    감사합니다!!
    잘 쓰겠습니다.

  2. swan 2009.06.17 14:31 Address Modify/Delete Reply

    수고하셨습니다.
    감사하는 마음으로 잘 쓰겠습니다.

  3. 지나가는 사람 2009.06.18 17:37 Address Modify/Delete Reply

    너무 수고가 많으십니다. 감사합니다.

  4. 삼각형 2009.06.19 16:54 Address Modify/Delete Reply

    언제나 수고가 많으십니다.

  5. 중용의도 2009.06.20 01:16 Address Modify/Delete Reply

    수고가 많구만유~
    쉬엄쉬엄 하세유~
    감사하구만유~

  6. 2009.06.21 15:20 Address Modify/Delete Reply

    비밀댓글입니다

    • BlogIcon 헬마 2009.06.22 14:33 신고 Address Modify/Delete

      도움말 파일을 한글화하는데에는 특정한 방법이라던가, 프로그램이란 것이 없습니다. 자신이 한글화하려는 프로그램/도움말에 따라 자체적으로 제공되는 툴만을 사용해야하는 경우도 있으며, 단순히 텍스트 에디터를 사용해서 작업해야하는 경우도 있습니다.

      현재 윈도에서 제일 많이 사용되는 도움말은 CHM 형식인데 이 도움말 파일에 대해 가장 편하게 작업이 가능한 툴은 Sisulizer 라고 생각합니다.

      더 자세한 사항은 네이트온으로 쪽지등을 주세요.


헬마입니다.

이것도 이번에 프로젝트 중에 만든겁니다.

기능은 문자열간에 인코딩을 편하게 좀 바꿔보자가 만들었습니다.

내장 DB로 주로 SQLite 를 사용하거나, 또는 플렉스 라는 넘이 UTF8만 준다더군요.

그래서 UTF8 변환할 일이 좀 많아져서 만들었네요.

간단한 사용법


// ANSI, 또는 UNICODE 에서 UTF8 로 변환하기 
std::string strText;
std::wstring strTextW;

CT2U8(strText).GetUTF8();
CT2U8(strTextW).GetUTF8();

// UTF8 에서 ANSI, UNICODE 로 변환
std::string strText8;

CU8T2(strText8).GetUTF16();
CU8T2(strText8).GetMBCS();

// GetUTF16 , GetMBCS 함수는 CT2U8, CU8T2 클래스 모두에 선언되어 있으니 편할 때 아무거나 선언해서 사용하시면 됩니다. 
// 오히려 전 만들어놓고 보니 ANSI < - > UNICODE 변환에 더 많이 사용하게 되네요. ^^




댓글을 달아 주세요

  1. NCC 2009.07.01 10:46 Address Modify/Delete Reply

    참고 하겠습니다. 좋은자료 감사합니다.

  2. BlogIcon 크키 2010.04.01 14:29 Address Modify/Delete Reply

    굿!잡! 입니다.
    ^^ 잘쓰겠습니다.

  3. ㅁㄴㅇㄹ 2012.08.23 20:47 Address Modify/Delete Reply

    Util에서 isAlphabet가 잘못된 것 같네요.

    for문을 돌릴때 isalpha() 이면 return true를 하는게 아니라
    for문을 돌리는 와중에 !isalpha() 이면, 즉 캐릭터 하나라도 alpha가 아니면 return false를 하고 for문 바깥 마지막에 return true를 해야 std::wstring 또는 std::string 전체에 대한 isalpha 검사가 될 듯 싶습니다

  4. a 2012.12.05 14:28 Address Modify/Delete Reply

    1. DeletePtr, DeletePtrA 함수는 의미가 없습니다. delete나 delete[]연산 안에 이미 nullptr 검사 루틴이 있기 때문이고
    2. 영문 윈도 등에서는 Korean_Korea 로캘을 찾지 못해 생성자에서 예외가 던져집니다.
    3. 복사 생성자도 제대로 정의되어있지 않는 것은 물론이고, 문자열을 새로 대입할 때 다른 모든 멤버도 똑같이 초기화를 다시 해 주어야 합니다.
    4. 심지어 UTF8에서 Ansi, Unicode로 변환하는 클래스는 제대로 짜여져있지도 않습니다.
    5. isAlphabet 잘못된 건 윗 분이 지적해주셨으니 패스

    혹시나 이 코드 가져다 쓰실 분들에게 참고가 되라고 남깁니다.


헬마입니다.

비주얼 스튜디오 2008 의 새로운 핫픽스들이 나왔습니다.

무슨 C++ 관련 핫픽스는 죄다 300메가쯤 하는군요. 이것들은 툭하면 핫픽스가 C++ 전체 헤더 수정인 모양입니다. ㅠㅠ

이거 무인설치로 엮어서 하나하나 설치해도 엄청걸리는 판국인데 ㄷㄷ

300메가짜리 핫픽스만 6-7개쯤 되는거 같네요..

KB958314

VC 2008: Using MFC to write an shell extension hangs explorer.exe


https://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=19101

KB956420

VC++ 2008: CRT 9.0 x64 strncpy access violation

https://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=19141

KB970510

QFE: .NET Framework 3.5 SP1 breaks type verification

https://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=19242

KB970449

Uploading MSI package
For DevDiv Servicing 665113
Unit Tests Never Complete - VSTestHost Hangs at 100% CPU


https://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=19617

이건 비주얼 스튜디오 2005의 핫픽스 입니다.

KB841816

Forward Port request for KB 841816 to VS2005 SP1 ( The Atl71.dll file causes a memory leak in the AtlAxWindowProc class  )

https://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=19089

댓글을 달아 주세요


헬마입니다.

오래만에 C++ 클래스 하나 올려봅니다. 사실은 Syntax 구문강조 기능 넣어서 적용되나 보려고.. ㄷㄷ

이번에 회사에서 프로젝트 하면서 간단하게 만들어본 로그 작석용 클래스 입니다.

정확히는 ACE 프레임워크에 있던 LOG 클래스 기능을 포팅했습니다.

ACE 프레임워크에서 로그 기능이 탐나는데 그거때문에 ACE 프레임워크를 쓰자니 뭔가 웃기는 짓거리 같아서 이것만 포팅했습니다.

사용법은 간단합니다.

구현은 싱글톤, 정적 클래스 로 구현되어 있습니다. 

LM_INSTANCE()
위 매크로는 싱글턴 클래스의 포인터를 반환하여 로그 클래스를 조작할 수 있도록 해줍니다.
LM_DEBUG(( 내용 ));
위 매크로를 이용하여 로그를 작성합니다. 반드시 괄호를 2개를 사용하셔야 합니다. 내용에는 printf 처럼 몇가지 인자가 들어갈 수 있습니다.
예제).
LM_DEBUG(( _T("[%D %T][PID=%P][Thread=%t][%N-%l][ %s ]"), L"로그 클래스 시험" ));
위와 같이 작성하시면 %D = 날짜, %T = 시간, %P = 프로세스의 PID, %t = 해당 스레드의 TID, %N = 매크로를 호출한 소스코드 파일이름, %l = 매크로를 호출한 소스코드 행 번호, %s = 뒤에 적힌 문자열 로 치환됩니다.
LM_EXIT();
로그 클래스 사용이 끝나면 이 매크로를 추가하여 반드시 메모리에서 해제해야합니다. 그렇지 않으면 약간의 메모리 누수가 발생할 수 있습니다.


전체적인 예).
 
#include 
#include 
#include 
#include 

#include "Util.h"
#include "Log_Msg.h"

int wMain()
{    
	std::wofstream ofStream( L"c:\\a.log", std::ios::out | std::ios::app );    
	ofStream->imbue( std::locale("kor") );  // 이 문장이 없으면 한글이 제대로 파일로 저장되지 않습니다.     

	// 로그를 파일 스트림과 디버그 출력으로 동시에 출력합니다
	LM_INSTANCE()->Open( CLog::LOG_STREAM | CLog::LOG_DEBUGGER, &ofStream, false );
    LM_DEBUG(( _T("[%D %T][PID=%P][Thread=%t][%N-%l][ %s ]"), L"로그 클래스 시험" ));
    LM_EXIT();

	return 0;
}

댓글을 달아 주세요


헬마입니다.

어제 날짜로 VMware 새버전에 대한 내부 베타 테스팅에 들어갔네요..

다행히도 저에게 초청메일이 오더군요. ^^

냉큼 홈페이지에 달려가서 설치하려고 보니...

아직은 설치조차 되지 않는 시스템이 매우 많은듯하네요. 제컴에서도 설치가 되지 않더군요.

윈도 7을 메인으로 할때도 설치가 되지 않고, 윈도 비스타를 메인으로 할때도 설치가 되지 않더군요. ㅠㅠ

그래서 일단은 간단한 VMWare Workstation 과 VMWare Player 의 새버전에 대한 기능 소개만 해보려고합니다.

제 컴에 설치가 되면 스샷이나 기타 다른 정보도 올려드리겠습니다.

VMWare Workstation

Windows 7 support (as a Host and Guest OS)
New WDDM Graphics driver for Windows 7 guests
OpenGL and Shader Model 3.0 for Windows XP and Vista guests
Download VMware vSphere 4 and install ESX as a guest OS to try out the latest features.
Dynamically Download the latest VMware Tools package only when you need it.
Configure your VMs to use Multi-core and 4-way CPUs.
Print from your VM without installing printer drivers. Virtual Printing courtesy of our friends at ThinPrint.
Automatically create snapshots on scheduled intervals with AutoProtect.
Secure your Virtual Machines with 128-bit encryption.
ALSA Sound support on Linux hosts enables multiple VMs to play "music" concurrently.
Instantly pause a VM to free up system resources or dedicate horsepower to other running VMs.
The highly acclaimed Linux Virtual Network Editor user interface has been implemented for Windows users.

드디어, Guest OS 에서 Shader Model 3.0 을 지원하여 Vista Aero 를 쓸 수 있을것 같다는 희망이 부풀게 하는군요.
또한, 윈도 7 에서 WDDM 의 신기능 비디오 드라이버를 지원하는군요. 하지만, 아직은 시험버전이라 이 드라이버는 2D만 지원한다는군요. 윈도 7 에서 3D 그래픽도 보려면 예전의 SVGA 드라이버로 전환하랍니다 ^^

VMWare Player

Feature Highlights:
The ability to create Virtual Machines!
New User Interface including a Virtual Machine Library
Windows 7 support (as a Host and Guest OS)
OpenGL support for Windows XP guest operating systems (give Google Earth a try!)
Automatically download and install the latest VMware Tools package
Multiple Monitor Support
Print from your VM without installing printer drivers. Virtual Printing courtesy of our friends at ThinPrint.
ALSA Sound support on Linux hosts enables multiple VMs to play "music" concurrently
VIX API support will let our coding fans write applications that can interact with their VMs

VMWare Player 에서 제일 눈에 띄게 변경된 점은 workstation 버전만의 고유기능이던 가상머신 생성기능이 추가되었습니다.
이 기능이 프리뷰버전에만 한시적으로 제공되는 것인지 앞으로 계속 이렇게 추가되는 것인지 잘 모르겠습니다.
이것이 확실히 추가되면 간단한 기능이 필요하신 분은 VirtualBox 보다는 VMWare Player 를 사용하시면 될 것 같습니다.

또한, 2가지 버전 공통 사항으로는 여지껏 로컬 설치패키지에 포함되어 패키지용량이 비대해진 원인이던 VMWare Tools 가 온라인 내려받기 방식으로 변경되었습니다. Guest OS 를 설치하고 메뉴를 선택하면 온라인으로 내려받아서 설치를 할 수 있다네요.
앞으로, VMware Tools 만 따로 자주 업데이트를 하게될 것이라는 뉘앙스를 많이 풍기더군요.

또한, 양 버전 모두 윈도 7 을 지원합니다.

댓글을 달아 주세요

  1. gover 2009.06.10 11:23 Address Modify/Delete Reply

    여기다 이런 댓글 달아도 실례가 안될지 모르겠는데..
    이제 리팩은 안하시는 건가요?
    토커 리팩 잘 쓰고 있었는데.. ㅡㅜ

  2. BlogIcon Sone 2009.06.11 17:08 신고 Address Modify/Delete Reply

    지나가다가 알려드립니다.
    command line에 -L English 옵션을 줘보세요.

    • BlogIcon 헬마 2009.06.11 19:51 신고 Address Modify/Delete

      그런 방법도 있군요.

      저는 다른방법으로 설치했습니다. -e 옵션 줘서 파일을 전체 압축을 푼 후에 거기서 msi 파일을 직접 실행하니 설치가 되더군요.


헬마입니다.

어제 새벽에 MSDN 에 비주얼 스튜디오 2010 베타 1 이 공개되었는데요.

열심히 수소문해서 구해보니 토렌토가 하나 있길래 다운받아서 설치해보았습니다.

앞으로 설치/사용해보면서 달라진 점등이 있으면 꾸준히 글을 올려보겠습니다.

설치환경 - 윈도 7 RC( 빌드 7127, X64 ), RAM - 8G

이번 비주얼 스튜디오 파일은 iso 파일은 용량이 1.3기가정도밖에 되지 않습니다. MSDN이 포함되어있지 않아서 인듯하네요. 
 
들리는 소문으로는 베타2는 연말 쯤에 나와서 내년초에 RC 내년 중반쯤에 RTM이 나올거라 하네요. ㅠㅠ


설치를 시작하면 이전 2008 과 비슷한 화면이 나타납니다. 버전 위에 Beta 1 이라고 나타나 있는것이 눈길을 확 끕니다.



특이하게 VC 9.0 런타임도 함께 설치합니다. 10.0 이 있는데 왜 하나 더 설치하는건지 무슨 차이점이 있는지 아직은 정확히 모르겠네요. 도움말 시스템이 또다시 변경되는 것인지 Help 3.0 을 설치하는군요.. 하지만 MSDN 라이브러리 DVD는 공개되지 않았습니다. ㅠ


설치할 컴포넌트를 선택하는 화면입니다. 닷넷과 C++ 두가지의 큰 분류가 있습니다. 처음에 매우 당황했는데 밑에 보면 Customize 라고 버튼이 있습니다. 이 버튼을 누르면 예전처럼 자세하게 선택할 수 있는 화면이 아래처럼 나타납니다.


2008 버전에 있던 표준, 전체 설치, 사용자 설치 선택이 사라지고 이렇게 변경되었네요. 이게 더 깔금한 것 같습니다. 이번 2010 에서는 F# 이라는 신종언어가 포함되어있습니다. 이 언어는 예전의 Visual J# 처럼 순식간에 사라지지 않기를 바랍니다. 


설치화면입니다. 설치 대고 있는 컴포넌트가 어떤것인지 이전보다 좀 더 확실히 알 수 있게 되었네요.
윈도 7 에서 설치하는데도 닷넷 프레임워크 4 베타 1를 설치하면 재부팅을 하라고 합니다. ㅠㅠ


마지막 설치 완료화면입니다.

이제 설치가 끝났네요. 낼부터는 열심히 사용을 해봐야겠습니다.

댓글을 달아 주세요

  1. BlogIcon Bardisch 2009.05.22 19:58 Address Modify/Delete Reply

    오오 저도 빨리 받아봐야겠군요!!


헬마입니다.

드디어 비주얼 스튜디오 2010 의 첫번쨰 공식 베타버전이 나타났습니다.

어제 새벽에 MSDN 구독자들에게 공개되었구요. 일반 공대는 이틀뒤라고 합니다.

이틀 먼저 써보실 분들은 토렌토를 사용하세요. 

2010 의 C++ 에서의 기능강화는 auto 키워드, static_assert 키워드, 우측값 참조가 제일 마음에 드는군요.

특히나 구찮은 typedef 를 줄일 수 있게 해주는 auto 키워드는 앞으로 매우 자주 사용될 것 같습니다.

다 받는대로 설치해보고 사용기를 올리겠습니다.

또한 2010 버전에서는 각 언어마다 병렬 프로그래밍 지원이 매우 강화되었습니다.


댓글을 달아 주세요


헬마입니다.

오늘은 우연히 기존에 작성했던 라이브러리의 코드를 재구성하면서 다시 검토하게 되었습니다.

전에 이곳에도 잠깐 올렸던 코드인데요. - Http Web Post 클래스라고 해서 올린 적이 있습니다.

재구성하면서 보니 버그가 있네요. ㅠㅠ

코드는 깔끔하게 보시려면 여기서 보시면 되구요.

그냥 보시려면 글을 밑에 올립니다.

bool CHttpPost::AddItem(const std::string& strName, const std::vector<std::string>& vecData )
{
 if( vecData.empty() )
  return false;

 for( std::vector<std::string>::const_iterator iter = vecData.begin(); iter != vecData.end(); ++iter )
 {
 #ifdef UNICODE
  DWORD dwPostData = strlen(iter->c_str()) * sizeof(wchar_t) + 1 * sizeof(wchar_t);

  wchar_t *pszPostData = new wchar_t[ dwPostData ];
  ZeroMemory(pszPostData, dwPostData);

  int nPostResult = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, iter->c_str(), strlen(iter->c_str()), pszPostData, dwPostData);

  dwPostData = strlen( strName.c_str() ) * sizeof(wchar_t) + 1 * sizeof(wchar_t);

  wchar_t *pszName = new wchar_t[ dwPostData ];
  ZeroMemory(pszName, dwPostData);

  int nNameResult = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, strName.c_str(), strlen(strName.c_str()), pszName, dwPostData);

  if( nPostResult > 0 && nNameResult > 0 )
   AddItem(tstring(pszName, nNameResult), tstring(pszPostData,nPostResult), true);

  if( pszName )
   delete [] pszName;
  if( pszPostData )
   delete [] pszPostData;
 #else
  AddItem(strName, *iter, true);
 #endif
 }

 return true;
}

코드를 보셨나요? 어느부분에 버그가 있을까요?
.
.
.
.
윈도 운영체제의 인코딩 변환함수인 MultiByteToWideChar 와 WideCharToMultiByte 함수는 은근히 사용하기 까다롭기로 유명합니다. 거기에 신경을 쓰다가 다른부분에 방심을 하고 말았네요.
윈도 운영체제의 인코딩 변환함수는 매개변수로 변환되서 저장될 공간을 직접 할당하고 그 크기를 알려줘야하는데요.
이게 두 함수가 살짝 달라서 헷갈리게 합니다.

하지만, 위의 코드는 버그는 거기에 있는게 아니었습니다.

잘 보시면 dwPostData 로 처음에 변환이 수행된 문자열이 저장될 공간을 할당하기 위해 크기를 계산합니다.
그리고 이 값을 그래도 new char 나 new wchar_t 에 사용하고 있는데요 . 사실 dwPostData 의 값은 바이트단위로 계산한 값이지
new 에 사용할 문자열의 갯수를 계산한 값이 아니라 최대 2배까지 공간이 더 할당되고 사용되지 않는 버그가 만들어지고 말았네요.

코드 자체가 작동하는데에는 문제가 없지만 이런 잠재적인 위험의 코드도 만들어서는 안되겠죠 ^^

오늘 코드를 옮기면서 새삼 깨닫고 말았네요. ^^

p.s strlen 등의 문자열 길이 함수는 널 문자를 제외한 길이를 반환해주기 때문에 이 길이를 토대로 new 로 할당할때는 널문자가 들어갈 공간만큼 (보통 1글자) 추가로 할당해줘야 합니다. 이를 까먹으면 문자열뒤에 이상한 글자가 연이어 붙어있는 짜증스런 상황을 겪게되죠 ^^

댓글을 달아 주세요

  1. 푸른하마 2009.05.30 11:58 Address Modify/Delete Reply

    봐두 모른다눈.


헬마입니다.

오랜만에 AutoIt v3 도움말 파일을 다시 빌드했습니다.

함수 레퍼런스에 좀 더 한글화가 진척되었습니다.

현재 진행도는 50% 정도 네요..

도움마 전체로는 History 를 제외하면 70%정도 수준까지 올라온거 같네요. ^^

댓글을 달아 주세요

  1. 중용의도 2009.04.16 21:35 Address Modify/Delete Reply

    헬마님 항상 수고가 많으십니다.~~~
    계속 힘써주세요~ㅋ

  2. nBerets 2009.04.17 10:13 Address Modify/Delete Reply

    헬마님 덕분에 오토잇을 공부할 수 있게 되어서 감사드립니다. 위의 삼각형님도 감사드립니다.

  3. BlogIcon 삼각형 2009.04.17 23:37 신고 Address Modify/Delete Reply

    업데이트 감사합니다. 조만간 온라인 도움말도 업데이트 하겠습니다.

  4. 센토리 2009.04.18 05:42 Address Modify/Delete Reply

    고생 많으시네요 소중한 자료 감사 드립니다. 므흣~ 영어에 무지한절 가뭄의 단비같은 자료예요

  5. 에이린 2009.04.22 08:34 Address Modify/Delete Reply

    정말 감사합니다.!!

  6. 사랑 2009.04.22 14:41 Address Modify/Delete Reply

    감사합니다. 도움만 받고 도움을 못주니 죄송합니다.

  7. 무시미 2009.05.01 12:48 Address Modify/Delete Reply

    감사합니다. 정말 큰도움이 되고 있습니다. (__)

  8. 초보자 2009.05.06 23:23 Address Modify/Delete Reply

    이제 막 배우기 시작한 사람입니다..
    위 파일두개를 복사해 놓고 도움말을 보니 색인은 한글로 나오는데 내용은(오른쪽) "페이지를 표시할 수 없습니다." 라고 나오네요

    왜 이럴까요??


헬마입니다.

MS에서 남모르게 비주얼 스튜디오 핫픽스를 끊임없이 만들어내고 있는데 별다른 설명도 없이 그저 Connect 사이트를 통해 배포를 하고 있는지라 접근이 많이 힘드네요.

Connect 사이트에 있던 한 줄짜리 설명이지만, 설명과 함께 링크를 첨부합니다.
전체 목록을 참조하시려면 이곳 으로 가시면 됩니다.

KB958842 ( 2월 16일 )
 증상 : VS 2008 SP1 을 사용해서 프로그램을 프로파일링할 때 충돌하는 현상 수정

KB958094 (3월 5일 )
 증상 : 원격 웹 사이트에서 XML 편집기 폴더 탐색
KB960075 (3월 5일 )
 증상 : VS 2008 SP1 - 디버깅하는 동안 콜스택 또는 조사창을 붙이거나 떼어내면 IDE가 충돌하는 현상

KB962219  ( 3월 11일 )
 증상 : VC 2008 SP1: vector <funtion<FT>> 가 충돌하는 현상 수정
 이전에도 STL/TR1 관련 핫픽스가 있었는데 이 핫픽스가 이전 핫픽스를 포함하는지 판단되지 않는군요. 용량으로 봐서는 포함하고 있는것 같습니다.  핫픽스의 관례상 현재 문제 해결에만 적용되는게 원칙이지만 서도 그렇게 기대하고 있습니다.
용량이 300메가를 넘어서 링크를 걸어둡니다. 

 내려받기 링크

KB967631 ( 3월 16일 )
 증상 : VS 2008 SP1 디버거 업데이트 ( 위에 있는 디버깅 관련 핫픽스를 포함하는지 여부는 역시 불명입니다 )

 내려받기 링크

이외에도 많은 핫픽스가 있습니다. 비주얼 스튜디오를 사용하신다면 가끔씩 들러서 관련 핫픽스의 유무를 확인해보시면 좋을 것 같네요.

댓글을 달아 주세요