전체 글 52

#File Error#

#File Error# 1.요약 프로그램이 끝날 때 메모리 릭이 난 부분은 가르쳐주는 거 아시죠? 근데 거기에 파일이름이 #File Error# 이라고 나오는 경우가 있습니다. 2.본문 우선은 누가 친절하게 메모리 릭을 잡아주느냐를 알아봐야겠죠. CRT의 디버그 힙이 바로 그 일을 해줍니다. 즉 메모리 할당할 당시에 ( new, malloc 문장) 그 라인 번호와 파일 이름을 CRT 자체적으로 어딘가에 저장하고 있는데, 그곳이 망가져버리거나 쓸 수 없게 되어버리면 #File Error# 이라고 대신해서 나온답니다. 우선 망가지는 경우로는 누군가가 그곳을 overwrite 해버리는 경우가 있겠고, 정말 있어서는 안될 일이겠습니다. 다음으로 우리에게 일어날 수 있는 시나리오로, dll 에서 할당한 메모리를 ..

Windows Programming 2008.02.12

regsvr32 를 하다가 죽을 때

ocx 가 메인이고, dll 들을 곁가지로 같이 갖고 있는 솔루션이 있다. 어느 순간 갑자기 빌드 마지막에 Debug Assert 가 일어나 버렸다. 황당했다. 프로그램 실행시도 아니고 빌드후에 regsvr32 를 하는 도중에 저런게 뜨다니... 이런 상황은 이전에도 많이 경험했다. 주로, dll 내의 DllRegisterServer 쪽의 코드가 잘못됐을 때, 혹은 ocx 의 InitInstance() 함수가 잘못 됐을 때 일어난다. 그런데, 오늘 겪은 상황은 모두 해당 사항 없음이다. 결국 문제를 발견했는데 원인은 잘 모르겠다. 문제는 dll 의 헤더에 멤버변수 하나를 추가한 것 뿐이다. 이상하다. 멤버변수를 추가해서 다시 컴파일 하고 lib 도 링크되고, dll 도 복사되고 하는데 왜 이런일이... ..

Windows Programming 2008.01.31

[펌] Visual Studio 2005 서비스팩1 통합 하기

Visual Studio 2005 서비스팩1 통합 하기. | ETC 2008-01-30 오전 11:23:27 김효종 (introc) 번호: 8005 / 평점: (-) / 읽음:107 흠... Visual Studio 2005 설치에도 많은 시간이 걸리는데, 거기다가 서비스팩 1을 적용하려면 정말 인내의 시간을 가져야 하더군요. 해서 XP나 다른 제품처럼 서비스팩을 원본에 통합하는 방법이 없을까 찾아보다가 아래 내용을 찾게 되었습니다. 이용하실 때 도움이 되셨으면 좋겠습니다. 원문 : http://blogs.msdn.com/heaths/archive/2006/12/16/slipstreaming-visual-studio-2005-service-pack-1.aspx Slipstreaming Visual Stu..

Windows Programming 2008.01.31

유니코드&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

VS 2005 인텔리센스 기능 꺼기

툭 하면 버벅되면서 CPU 잡아 먹는 VS2005 의 인텔리 센스... 이 놈을 간단하게 Disable 시키는 팁. 2005로 개발하다 보면 처음 프로젝트 로딩할때와, 개발 중간중간에 Intellisense 업데이트 한답시고 CPU 를 이빠이 잡아 먹으면서 PC 를 엄청 느리게 만듭니다. (거의 다른 작업을 수행하지 못하더군요.) Intellisense 놈이 하는 일이 자연어 처리를 실시간으로 수행하면서 도움말과 멤버함수/변수 들을 조회해 줍니다. 위와 같이 멤버 변수나 멤버 함수들을 실시간으로 띄워주는 역할을 수행하기 위한 디비를 세팅해 줍니다. (ncb 파일이 이런 정보를 담고 있는것이라고 하네요) 근데, 비쥬얼 어시스트를 사용하면 굳이 위의 기능을 사용할 필요가 없습니다. 비쥬얼 어시스트를 설치하신..

Windows Programming 2007.10.11