본문 바로가기

MFC36

CryptGetUserKey() 함수 이용시 에러 발생시 확인 방법 CryptGetUserKey() 함수를 이용해서 MS에서 제공하는 Key를 관리할 수 있다.이 때 잘 사용하다가 이유없이 에러가 발생하는 경우가 있다. 저장된 키에 문제가 발생했을 경우이다.https://msdn.microsoft.com/ko-kr/library/windows/desktop/bb204778(v=vs.85).aspx 위의 페이지에 MS에서 제공하는 Key Storage에 대한 정보를 확인할 수 있다. 이와 같은 문제가 발생하면 관련 Key가 저장된 폴더를 삭제하고 함수를 이용하면 문제가 해결이 된다. 일반적으로 RSA를 사용할 경우 아래 폴더를 삭제 한다. user/appdata/roaming/microsoft/crypto/rsa 2016. 9. 30.
unicode CString to char* MFC에서는 CString을 많이 사용을 하는데 정말 지원하는 함수가 적다.char*로 변경할 때 아래와 같이 처리를 하면 된다. char buffer[1024] = {0};CString m_str = _T("TEST"); memset(buffer, 0, 1024);strcpy(buffer, CT2A(m_str) ); CT2A는 ATL and MFC String Conversion Macros로서 MFC에서 제공하는 매크로이다.아래 링크를 들어가면 자세한 설명이 있다. https://msdn.microsoft.com/en-us/library/87zae4a3.aspx 2016. 9. 20.
특정 폴더 파일, 하위 폴더를 삭제하는 함수 특정 폴더 파일, 하위 폴더를 삭제하는 함수 구현 void etDataBase::RemoveDir(CString strDir, BOOL bOnlyFile/* = false*/) { CFileFind finder; BOOL bWorking = TRUE; CString strDirFile = strDir + CString("\\*.*"); bWorking = finder.FindFile(strDirFile); while(bWorking) { bWorking = finder.FindNextFile(); if(finder.IsDots()) continue; if(finder.IsDirectory() && !bOnlyFile) RemoveDir(finder.GetFilePath()); else ::DeleteFi.. 2016. 6. 1.
바이트 순서 변환 함수 https://msdn.microsoft.com/ko-kr/library/cc468322(v=vs.71).aspx Windows 소켓 바이트 순서 변환 함수함수용도ntohs16비트 수량을 네트워크 바이트 순서에서 호스트 바이트 순서로(big-Endian에서 little-Endian으로) 변환합니다.ntohl32비트 수량을 네트워크 바이트 순서에서 호스트 바이트 순서로(big-Endian에서 little-Endian으로) 변환합니다.htons16비트 수량을 호스트 바이트 순서에서 네트워크 바이트 순서로(little-Endian에서 big-Endian으로) 변환합니다.htonl32비트 수량을 호스트 바이트 순서에서 네트워크 바이트 순서로(little-Endian에서 big-Endian으로) 변환합니다.또한 .. 2016. 3. 16.
Error C2039: 'Enable3dControls' : is not a member of 'CWinApp' Visual Studio 2005를 사용하고 있는데 Debug 모드에서는 정상적으로 빌드가 되는데Release 모드로 하면 빌드 에러가 발생하는 문제입니다.에러 메시지는 아래와 같습니다.Error C2039: 'Enable3dControls' : is not a member of 'CWinApp'구글로 검색을 해 본 결과 아래와 bug라고 합니다.MSDN Managed Newsgroups에서 관련 내용은 bug이기 때문에 삭제를 하면 된다고 합니다. Yes, this is due to a bug. You should be able to comment out the Enable3dControl text lines in afxwin2.inl to get rid of the problem. They are n.. 2016. 3. 10.
MSXML2에서 indentation 처리 방법 https://msdn.microsoft.com/ko-kr/library/ms757021(v=vs.85).aspx 정말 당황스럽다. 어떻게 하는지 정말 알수가 없어서 찾아보니까 이런 예제가 있다. 다른 방법이 있는지 모르겠다. 우선 아래 방법으로 임시 처리를 한다.// Create an element to hold three empty subelements. pe = pXMLDom->createElement(L"node3");// Add newline +tab for indentation. pRoot->appendChild(pXMLDom->createTextNode(L"\n\t")); 직접 \n\t을 넣어 맞춰야 한다. 이런 방법밖에 없나? 2016. 3. 7.
MSXML2 사용중 xmlns="" 자동 추가되는 문제 해결 방법 MSXML2를 이용해서 XML을 처리하는데 문제가 발생해서 자료를 찾아보았다. appendChild를 하면 xmlns=""이 자동으로 들어가는 문제였다. MFC를 개발 경력 10년이 넘어서 처음으로 하는데 너무 불편한 것이 많다. 아래 글과 같이 XML Namespace를 처리하는 방식 때문인데 Dom의 namespace와 일치시켜면 자동으로 들어가지 않는다. 맨처음 DOM의 namespaceURI를 얻어와서 처리를 해 봤는데 NULL이 들어있다. 분면 XML에는 xmlns가 있는데도 말이다. 왜일까? 찾아봐야 할 것이 너무 많다. 직접 Root의 Attribute를 파싱해서 xmlns를 얻어오고 createNode를 이용해서 namespace를 직접 넣어주면 문제없이 잘 처리가 된다. 자신이 사용하는 .. 2016. 3. 7.
Disable optimization option at some function in Visual Studio Disable optimization option at some function in Visual Studio개발을 하다보면 Debug 모드에서는 잘 작동하는 것이 Release에서는 작동이 안되는 경우가 있다. Visual Studio 컴파일 옵션을 보면 Optimization이 있다. 이것을 사용하면 확실히 실행파일에 속도 향상을 확인 할 수 있다. 하지만 optimization이 기존 소스를 수정하기 때문에 원하는 방향을 함수나 코드가 작동하지 않는 경우가 발생한다. QT 개발로 C++ Builder만 사용하다가 Visual Studio를 사용하면서 이 부분을 몰라 고생을 했다.특정 함수나 영역에 최적화가 되지 않게 처리하기 위한 방법이 있다. 함수 밖, 위에 off를 하고 함수 끝, 밖에 on을 .. 2015. 7. 10.
CWnd::OnNotify 통지메시지를 처리할 때 사용하는 가상함수 통지메시지(Notify message)는 WM_NOTIFY 윈도우 메시지 파라미터로 전달되는 어떤 코드이며, SendMessage()함수를 이용해 전달되므로 메시지 큐를 거치지 않고 핸들러러 함수에 직접 호출한 결과를 가져옵니다.이런 통지메시지가 필요한 이유는 컨트롤 윈도우에 대해 사용자가 발생시킨 각종 이벤트를 부모 윈도우의 코드에서 해결하기 위해서입니다. 만일 통지메시지가 없다면 컨트롤 윈도우의 파생 클래스를 매번 만들어서 사용해야 합니다.새로운 컨트롤 윈도우를 개발하고자 한다면 통지 메시지에 대해서도 설계해야 합니다. 마치 클래스의 가상 함수를 설계하는 것과 비슷하다고 할 수 있습니다.(출처: 프리렉 / MFC 윈도우 프로그래밍 406, 407 page) The framework calls this.. 2014. 8. 8.
LIST