Windows Programming 19

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

권한상승을 위해 실행파일에 manifest 추가 (펌)

Vista Note -3 권한상승을 위해 실행파일에 manifest 추가 Administrators 권한이 있는 경우에만 정상적으로 수행될 수 있는 어플리케이션을 만들기 위해서는 manifest를 이용하여 '이 프로그램을 수행하기 위해서는 반드시 권한상승이 필요하다'는 정보를 실행파일에 포함시킬 필요가 있습니다. 물론, 오른마우스를 클릭해서 "관리자 권한으로 실행" 으로 어플리케이션을 수행하거나, '속성'에서 '관리자 권한으로 이 프로그램 실행'을 선택할 수도 있겠지만, 사용자에게 이렇게 어플리케이션을 수행할 것을 강요하는 것은 매우 어려운 일이기 때문에, 실행파일 자체에 '이 어플리케이션은 반드시 Administrators permission이 필요하다' 라는 정보를 추가하여, 자동적으로 권한상승 창이..

Windows Programming 2007.07.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