본문 바로가기

개발49

Visual C++ 2005 CRT DLL 버전 충돌 문제 VS2005 CRT DLL(msvcp80.dll, msvcr80.dll)을 사용하는 COM 모듈을 개발할 때 설치 대상 PC에 .NET 2.0 SP1이나 .NET 3.0 SP1이 설치되어 있는 경우 COM 등록 시에 로드하는 CRT DLL 버전 8.0.50727.762를 side by side assemblies 기능에서 자동으로 8.0.50727.1433으로 리다이렉트해준다. 문제는 1433 버전으로 작동하는 경우 COM 등록이 안 되는 등의 에러가 발생한다. Isolated COM이나 Per-application Configuration(Windows XP, Windows Vista)으로도 해결할 수 있지만 가장 간단한 방법은 Private Assemblies로 항상 762 버전을 사용하도록 하는 것.. 2008. 9. 30.
사용자 권한 ActiveX 컨트롤 설치 사용자 권한 ActiveX 컨트롤 설치(Non-admin ActiveX control installation)IE8부터 Windows Vista에서 관리자 권한이 없는 사용자가 UAC 프롬프트 없이 ActiveX 설치가 가능하도록 변경되었다. 이 기능을 사용하려면 ActiveX 컨트롤 자체를 변경하지 않고 기존 ActiveX 컨트롤을 약간 변경된 방법으로 패키징해주기만 하면 된다. 사용자 권한으로 설치가 되기 때문에 전체 시스템에는 영향을 미치지 않으면서 필요한 ActiveX 컨트롤의 기능을 사용할 수 있다는 장점이 있다. 관리자 권한이 있는 사용자는 현재 사용자 환경에만 설치할 것인지 전체 사용자 환경(관리자 권한)에 설치할 것인지 선택할 수도 있다. 이 기능은 당연히 Windows Vista에서만 사.. 2008. 3. 14.
크리티컬 섹션을 이용한 스레드 동기화 다중 스레드 환경의 프로그램에서 여러 스레드 사이에서 공유하는 리소스를 사용한다면 반드시 스레드 간 동기화를 해줘야 한다. Windows 환경이라면 스레드 동기화를 위해서 가장 많이 사용하는 동기화 방법은 크리티컬 섹션일 것이다. // 크리티컬 섹션 변수 CRITICAL_SECTION cs; // 크리티컬 섹션 초기화 InitializeCriticalSection(&cs); // 공유 리소스를 사용하는 스레드 사용 ... // 모든 스레드가 종료된 후 크리티컬 섹션 삭제 DeleteCriticalSection(&cs) DWORD WINAPI ThreadProc(LPVOID pParam) { ... // 크리티컬 섹션 소유권 가져오기 EnterCriticalSection(&cs); // 공유 리소스에 접근.. 2007. 12. 18.
실행 중인 IE창 모두 닫기 현재 실행 중인 IE창을 모두 닫습니다. BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam) { TCHAR szClassName[256]; if (GetClassName(hWnd, szClassName, 256) > 0) { if (_tcsicmp(szClassName, _T("IEFrame")) == 0) PostMessage(hWnd, WM_CLOSE, 0, 0); } return TRUE; } ... EnumWindows(EnumWindowsProc, 0); ... 2007. 12. 14.
VC6의 CHtmlView 버그 VC6의 CHtmlView에는 버그가 있어서 텍스트 입력에서 Tab, Del, Enter 키등이 동작하지 않는다. VC7이상의 CHtmlView에서는 버그가 수정되었는데 PreTranslateMessage()를 오버라이딩함으로 해결하였다. VC6에서 해당 버그를 수정하려면 CHtmlView를 상속해서 VC7의 CHtmlView::PreTranslateMessage()로 PreTranslateMessage()를 오버라이딩하면 된다. BOOL CHtmlView::PreTranslateMessage(MSG* pMsg) { ASSERT(pMsg != NULL); ASSERT_VALID(this); ASSERT(m_hWnd != NULL); // allow tooltip messages to be filtered.. 2007. 9. 5.
Windows Installer로 프로그램 추가/제거에서 안 보이게 설치하기 간혹 시스템 컴포넌트를 설치한다거나 전체 설치 중 일부를 별도의 설치 파일로 만드는 경우 프로그램 추가/제거에 해당 컴포넌트가 안 보이게 하고 싶을 수 있습니다. Windows Installer에서 이런 경우에는 ARPSYSTEMCOMPONENT 프로퍼티를 1로 주면 프로그램 추가/제거에서 설치된 프로그램을 이름을 안 보이게 할 수 있습니다. 2007. 8. 6.