336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

 

 

 

 

 

Visual Studio 2017

 

 

 

 

빌드 도중 컴파일러의 힙 공간이 부족합니다.

 

라는 에러가 발생하는 경우가 있다.

 

 

 

 

 

 

해당 에러는

 

힙 공간의 부족으로 발생하는 에러로

 

힙 공간을 기본값보다 늘려주면

 

문제가 해결된다.

 

 

 

 

 

프로젝트 속성 페이지

 

C/C++ -> 명령줄 -> 추가 옵션

 

기본값은 /Zm100

 

두배로 늘이고 싶다면 /Zm200 으로 설정하면 된다.

 

 

https://docs.microsoft.com/ko-kr/cpp/build/reference/zm-specify-precompiled-header-memory-allocation-limit?view=msvc-160 

 

/Zm(미리 컴파일된 헤더 메모리 할당 제한 지정)

자세한 정보: /Zm(미리 컴파일된 헤더 메모리 할당 제한 지정)

docs.microsoft.com

 

 

 

 

 

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

 

 

MFC D8040 : 자식 프로세스를 만들거나 통신하는 동안 오류가 발생했습니다

 

 

 

 

 

 

 

 

특정 PC에서만 발생하는 경우로

 

프로젝트의 경로에 한글이 포함된 경우 발생한다.

 

 

 

 

 

 

 

 

경로에 한글이 포함되어 있지 않은 곳으로 옮기면 정상 빌드

 

 

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

컴파일러 경고 (수준 4) C4840

variadic 함수의 인수로 서 'type' 클래스를 이식 불가능 하 게 사용 합니다.

설명

Variadic 함수에 전달 되는 클래스 또는 구조체는 일반적으로 copyable 이어야 합니다. 해당 개체를 전달할 때 컴파일러는 비트 복사본을 만들기만 하고 생성자 또는 소멸자를 호출하지 않습니다.

이 경고는 Visual Studio 2017부터 사용할 수 있습니다.

예제

다음 샘플에서는 C4840를 생성 하 고 수정 하는 방법을 보여 줍니다.

 

// C4840.cpp
// compile by using: cl /EHsc /W4 C4840.cpp
#include <stdio.h>

int main()
{
    struct S {
        S(int i) : i(i) {}
        S(const S& other) : i(other.i) {}
        operator int() { return i; }
    private:
        int i;
    } s(0);

    printf("%i\n", s); // warning C4840 : non-portable use of class 'main::S'
                       // as an argument to a variadic function
    // To correct the error, you can perform a static cast
    // to convert the object before passing it:
    printf("%i\n", static_cast<int>(s));
}

 

를 사용 하 여 작성 및 관리 되는 문자열의 경우 CStringW 제공 된를 operator LPCWSTR() 사용 하 여 CStringW 개체를 서식 문자열에 필요한 C 스타일 문자열 포인터로 캐스팅 해야 합니다.

 

CStringW str1;
    CStringW str2;
    // ...
    str1.Format("%s", static_cast<LPCWSTR>(str2));

 

wave player class

Programming/MFC 2017. 9. 27. 11:14 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

wave player class



1. mciCommand  (적극 권장)

KMedia.h  KMedia.cpp




2. vfw 
KMp3.h  KMp3.cpp




3. directShow 

mp3.h  mp3.cpp


336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

연결 프로그램 변경 [레지스트리 편집]


JSP 파일을 메모장으로 열기 설정을 했습니다..



자.. 그럼 레지스트리를 고쳐볼까요?..

시작 -> 실행.. 을 눌러서 실행창을 띄웁니다..




그리고.. regedit.. 를 입력해서.. 레지스트리 편집기를 띄웁니다..



편집 -> 찾기를 누릅니다.. Ctrl + F 를 누르셔도 됩니다..



찾기에.. 잘 못 연결된 프로그램 파일 형식.. 확장자.. 그러니까 저는 .jsp 파일을 내용에 넣고 찾기를 시작하겠습니다..
문자열 단위로 일치.. 선택하시면.. 정확하게.. .jsp 파일만 찾습니다.. 



여기서 잠깐!.. 
"어랏!?.. 나는 파일 확장자가 안보이는데.. 이게 확장자가 뭐지?".. 하시는 분들도 계실겁니다..



그런 분들은.. 아래 더보기..를 눌러서 보세요..

더보기



아무튼.. 검색으로.. 나오긴 했는데.. 



이건 보기에도.. 너무 깔끔해 보입니다.. (기본값) 밖에는 안보이는군요..
이녀석 지워볼까요?.. 하지만.. 지우기엔 겁이납니다..

F3을 눌러서 다음 .jsp 를 찾던가.. 다시 찾기를 눌러서 .jsp 를 검색합니다..

계속 검색을 하다보니.. 어랏.. 이녀석은 뭔가 있어보입니다.. 특히 OpenWithList 가 눈에 확 들어옵니다..



OpenWithList 를 보니.. 역시.. 메모장이 보이는군요..



a부터 i까지 뭔가 연결되있는것 같습니다.. 연결프로그램을 열어보니.. 여기있는것과 똑같은 것들입니다..



이건 지워도.. 나중에 또.. 추가를 할 수 있으니.. 삭제해버립니다..
여긴.. 제가.. MRUList 는 체크 안했는데.. 같이 지워버리세요..



삭제하고.. 다시 연결 프로그램을 살펴봤는데.. 메모장.. 이녀석은 아직 살아있고..



이녀석도.. 그대로 입니다..



이.. 잡초같은 녀석!.. 이라고 욕하실것 까진 없습니다..

레지스트리 특성상.. 재시작을 해야만.. 변화가 있거든요..

저는 재시작하기는 귀찮고.. 로그오프를 하겠습니다;..

그리고.. 다시 로그인 하는 순간!.. 눈에 보이는 하얀색의 .jsp 파일!..




드디어.. 레지스트리 편집으로.. 연결 프로그램을 초기화하는 방법이 끝났습니다..

이렇게 해서도 연결 프로그램이 바뀌질 않는다면..

UserChoice 란게.. 있을수도 있는데.. 여기서도 값 데이터를.. 삭제해주시면 됩니다..



이렇게 해서도 안바뀌면..
.jsp 검색해서 나온것 중에서.. 값 데이터를.. 지우시고.. 아무것도 없이 넣으시면 됩니다..



위에 OpenWithList 의 기본값중에서 값 데이터를 지워도 상관없지만..
이걸 지우시면.. 알려진 파일 형식이 아니게 되어버려서.. 확장자가 표시가 됩니다..


그럼.. 조심해서 지우시구요.. 지우시기 전에.. 레지스트리 저장을 하시거나.. 어디에 옮겨 적으셔서..
복구를 하실 수 있게.. 조치를 취한 후에.. 하시길 바랍니다..

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

연결 프로그램 변경 [레지스트리 편집]


JSP 파일을 메모장으로 열기 설정을 했습니다..



자.. 그럼 레지스트리를 고쳐볼까요?..

시작 -> 실행.. 을 눌러서 실행창을 띄웁니다..




그리고.. regedit.. 를 입력해서.. 레지스트리 편집기를 띄웁니다..



편집 -> 찾기를 누릅니다.. Ctrl + F 를 누르셔도 됩니다..



찾기에.. 잘 못 연결된 프로그램 파일 형식.. 확장자.. 그러니까 저는 .jsp 파일을 내용에 넣고 찾기를 시작하겠습니다..
문자열 단위로 일치.. 선택하시면.. 정확하게.. .jsp 파일만 찾습니다.. 



여기서 잠깐!.. 
"어랏!?.. 나는 파일 확장자가 안보이는데.. 이게 확장자가 뭐지?".. 하시는 분들도 계실겁니다..



그런 분들은.. 아래 더보기..를 눌러서 보세요..

더보기



아무튼.. 검색으로.. 나오긴 했는데.. 



이건 보기에도.. 너무 깔끔해 보입니다.. (기본값) 밖에는 안보이는군요..
이녀석 지워볼까요?.. 하지만.. 지우기엔 겁이납니다..

F3을 눌러서 다음 .jsp 를 찾던가.. 다시 찾기를 눌러서 .jsp 를 검색합니다..

계속 검색을 하다보니.. 어랏.. 이녀석은 뭔가 있어보입니다.. 특히 OpenWithList 가 눈에 확 들어옵니다..



OpenWithList 를 보니.. 역시.. 메모장이 보이는군요..



a부터 i까지 뭔가 연결되있는것 같습니다.. 연결프로그램을 열어보니.. 여기있는것과 똑같은 것들입니다..



이건 지워도.. 나중에 또.. 추가를 할 수 있으니.. 삭제해버립니다..
여긴.. 제가.. MRUList 는 체크 안했는데.. 같이 지워버리세요..



삭제하고.. 다시 연결 프로그램을 살펴봤는데.. 메모장.. 이녀석은 아직 살아있고..



이녀석도.. 그대로 입니다..



이.. 잡초같은 녀석!.. 이라고 욕하실것 까진 없습니다..

레지스트리 특성상.. 재시작을 해야만.. 변화가 있거든요..

저는 재시작하기는 귀찮고.. 로그오프를 하겠습니다;..

그리고.. 다시 로그인 하는 순간!.. 눈에 보이는 하얀색의 .jsp 파일!..




드디어.. 레지스트리 편집으로.. 연결 프로그램을 초기화하는 방법이 끝났습니다..

이렇게 해서도 연결 프로그램이 바뀌질 않는다면..

UserChoice 란게.. 있을수도 있는데.. 여기서도 값 데이터를.. 삭제해주시면 됩니다..



이렇게 해서도 안바뀌면..
.jsp 검색해서 나온것 중에서.. 값 데이터를.. 지우시고.. 아무것도 없이 넣으시면 됩니다..



위에 OpenWithList 의 기본값중에서 값 데이터를 지워도 상관없지만..
이걸 지우시면.. 알려진 파일 형식이 아니게 되어버려서.. 확장자가 표시가 됩니다..


그럼.. 조심해서 지우시구요.. 지우시기 전에.. 레지스트리 저장을 하시거나.. 어디에 옮겨 적으셔서..
복구를 하실 수 있게.. 조치를 취한 후에.. 하시길 바랍니다..

'Programming > MFC' 카테고리의 다른 글

wave player class  (0) 2017.09.27
연결 프로그램 변경 [레지스트리 편집]  (0) 2017.09.27
[MFC] Dialog 닫기 (OnOK/EndDialog)  (0) 2017.02.08
CWnd::Invalidate  (0) 2016.11.15
MFC Dialog Position Save & Load  (0) 2016.11.10

[MFC] Dialog 닫기 (OnOK/EndDialog)

Programming/MFC 2017. 2. 8. 16:54 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

[MFC] Dialog 닫기 (OnOK/EndDialog)


 
1. OnOK()
 
2. OnClose()
 
3. EndDialog()
 
4. DestoryWindow()


CDialog::OnOK

Override this method to perform actions when the OK button is activated. If the dialog box includes automatic data validation and exchange, the default implementation of this method validates the dialog box data and updates the appropriate variables in your application.

If you implement the OK button in a modeless dialog box, you must override the OnOK method and call DestroyWindow inside it. Do not call the base-class method, because it calls EndDialog which makes the dialog box invisible but does not destroy it.

CDialog::EndDialog

Call this member function to terminate a modal dialog box.



virtual void CDialog::OnOk();
호출 : 사용자가 OK버튼을 누르면 호출된다. (id값이 IDOK인 버튼)
        즉, OnOk()함수는 OK버튼클릭 메시지 핸들러라고 할 수 있다.
사용 : 컨트롤 값을 읽거나 값의 타당성을 검사한 후 Dialog 닫기





다이얼로그를 닫을때 OnOK 로 닫는것 [확인(OK)] 버튼을 눌러서 닫는 것



EndDialog 는 다이얼로그를 강제로 중지시킨다.








CWnd::Invalidate

Programming/MFC 2016. 11. 15. 09:34 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

CWnd::Invalidate

void Invalidate(
   BOOL bErase = TRUE 
);
bErase

Specifies whether the background within the update region is to be erased.

The client area is marked for painting when the next WM_PAINT message occurs. The region can also be validated before a WM_PAINTmessage occurs by the ValidateRect or ValidateRgn member function.

The bErase parameter specifies whether the background within the update area is to be erased when the update region is processed. If bEraseis TRUE, the background is erased when the BeginPaint member function is called; if bErase is FALSE, the background remains unchanged. If bErase is TRUE for any part of the update region, the background in the entire region, not just in the given part, is erased.

Windows sends a WM_PAINT message whenever the CWnd update region is not empty and there are no other messages in the application queue for that window.




Invalidate(FALSE)  ->  WM_PAINT

Invalidate(TRUE)   ->  WM_ERASEBKGND   -> WM_PAINT




MFC Dialog Position Save & Load

Programming/MFC 2016. 11. 10. 11:45 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

MFC Dialog Position Save & Load


참조 : http://www.codeproject.com/Articles/1154/Saving-a-windows-size-position-and-state-in-MFC


Saving the window placement








BOOL CMainFrame::DestroyWindow() 
{
    WINDOWPLACEMENT wp;
    GetWindowPlacement(&wp);
    AfxGetApp()->WriteProfileBinary("MainFrame", "WP", (LPBYTE)&wp, sizeof(wp));

    return CMDIFrameWnd::DestroyWindow();
}






Restoring the window placement









void CMainFrame::OnShowWindow(BOOL bShow, UINT nStatus) 
{
    CMDIFrameWnd::OnShowWindow(bShow, nStatus);

    static bool bOnce = true;

    if(bShow && !IsWindowVisible()
        && bOnce)
    {
        bOnce = false;

        WINDOWPLACEMENT *lwp;
        UINT nl;

        if(AfxGetApp()->GetProfileBinary("MainFrame", "WP", (LPBYTE*)&lwp, &nl))
        {
            SetWindowPlacement(lwp);
            delete [] lwp;
        }
    }
}







'Programming > MFC' 카테고리의 다른 글

[MFC] Dialog 닫기 (OnOK/EndDialog)  (0) 2017.02.08
CWnd::Invalidate  (0) 2016.11.15
MFC - 다이얼로그 생성시 발생되는 메세지들...  (0) 2016.11.07
MFC x64 ADO msado15.dll  (0) 2016.10.28
x64 ADO import  (0) 2016.10.28
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

출처 : http://namacin.egloos.com/1368314



MFC - 다이얼로그 생성시 발생되는 메세지들...

다이얼로그가 생성될 때 발생되는 메세지의 순서로는

DoModal()
PreSubclassWindow()
OnNcCreate()
OnNcCalcSize()
OnCreate()
OnSize()
OnMove()
OnSetFont()
OnInitDialog()
OnWindowPosChanging()
OnMove()
OnWindowPosChanged()
OnWindowPosChanging()
OnNcActivate()
OnActivate()
OnShowWindow()
OnWindowPosChanging()
OnNcPaint()
OnEraseBkgnd()
OnChildNotify()
OnCtlColor()
OnWindowPosChanged()
OnPaint()
OnCtlColor()
OnCtlColor()
OnNcHitTest()
OnSetCursor()
PreTranslateMessage()
OnMouseMove()
OnNcHitTest()
OnSetCursor()
PreTranslateMessage()


클래스 위자드에서 메세지 필터를 Window로 주고 발생하는 모든 메세지에 대해서
간단한 문자 출력용 핸들러를 주었다.

이 상황에서 아무것도 없는 기본 다이얼로그 화면을 DoModal() 함수로 띄웠을 때 
발생하는 메세지들을 캡쳐한것이다.

어떠한 핸들러들은 afx_msg 함수로 메세지 맵에 등록되고 어떠한 함수들은
vitual로 선언되며 메세지 맵에 등록되지 않았다. 이렇게 구분되는 기준은 무얼까?


%%
메세지 맵에 등록되는 함수(핸들러) 들은 정말 윈도가 뿌려대는 메세지에 대한
핸들러이고 virtual로 선언되는 함수들은 메세지에 대한 핸들러가 아니라
프로세스가 진행되면서 당연히 호출되는 함수들이 아닐까 생각된다.

 

어떠한 핸들러들은 publc으로, 어떠한 핸들러들은 protected로 선언된다.
(메세지 맵에 등록된 핸들러들은 모두 protected이다.)

중요한지 아닌지는 모르겠지만 차근차근 알아봐야할 내용들..

 


[메세지에 대한 설명은 www.winapi.co.kr 에서 발췌]

DoModal - 
PreSubclassWindow -

WM_NCCREATE - 
WM_NCCALCSIZE - 
WM_CREATE - 
WM_SIZE - 
WM_MOVE - 
WM_SETFONT - 
WM_ONINITDIALOG - 
 다이얼로그가 메모리에 만들어지고 화면에 보이기 적전에 보내진다고 한다.
 오버랩드 윈도우의 WM_CREATE에 해당한다는데...
 
WM_WINDOWPOSCHANGING - 
WM_MOVE - 
WM_WINDOWPOSCHANGED - 
WM_WINDOWPOSCHANGING - 
WM_NCACTIVATE - 
 비 작업영역(client영역을 제외한 영역을 말하는것이 아닐까..)에 대한 활성 
 또는 비 활성화시 변경되는 내용이 있을 때 보내진다고 한다.
 
WM_ACTIVATE - 
 WM_NCACTIVATE가 비 작업 영역에 대한 메세지라면 이 메세지는 작업영역에 대한
 처리를 위한 메세지..

WM_SHOWWINDOW - 
 윈도우의 보임 상태가 변경되기 직전에 보내진다고 한다. WS_VISIBLE 스타일을 가진 윈도우가
 생성될 때도 보내진다고 한다.
 
WM_WINDOWPOSCHANGING - 
WM_NCPAINT - 
 비 작업 영역을 그려야 할 때 발생한다고 한다
 
WM_ERASEBKGND - 
 윈도우 크기가 변경 되었거나 다른 윈도우에 가려진 부분이 드러났다거나 할 때 배경을 지우기 위해
 이 메셎가 보내진다고 함. WM_PAINT에서 출력하기 전에 먼저 그려진 내용을 지워야 하는데 이 메세지에
 대해 처리를 하지 않으면 "윈도 클래스에 등록된!!" 디폴트 배경 브러시로 지운다고함.
  
 %% 윈도 클래스 배경 브러시가 NULL 일경우 아무것도 하지 않음.
 
WM_CHILDNOTIFY - 
WM_WINDOWPOSCHANGING - 
WM_PAINT - 
 1. 윈도우가 처음 생성되었을 때
 2. 윈도우의 위치가 이동되었을 때
 3. 윈도우의 크기가 변경, 최소, 최대화 되었을 때
 4. 다른 윈도우에 가려져 있다가 드러날 때
 5. 스크롤 될 때
 발생한다고 한다.
 
WM_CTLCOLOR - 
 윈도우가 그려질 필요가 있을 때 발생되어 브러시의 색상을 지정하게 된다.
 
WM_CTLCOLOR - 
WM_NCHITTEST - 
 마우스를 이동하거나 버튼을 누르거나 놓을 때마다 발생. 커서가 있는 위치가 윈도우의 어디쯤인지를
 윈도우에게 질문을 하며 운영체제닌 이 메세지의 리턴값에 따라 마우스를 처리한다고 한다
 
WM_SETCURSOR -

PreTranslateMessage -

뒤로

WM_MOUSEMOVE
WM_NCHITTEST
WM_SETCURSOR

의 메세지가 연속적으로 나오는데 이 메세지는 다이얼로그 생성과는 관계가 없는듯..
또, 각 메세지들의 중간중간에 WindowProc, DefWindowProc, WM_CTLCOLOR, PreTranslateMessage
메세지가 매우 자주 섞여 나왔다.


'Programming > MFC' 카테고리의 다른 글

CWnd::Invalidate  (0) 2016.11.15
MFC Dialog Position Save & Load  (0) 2016.11.10
MFC x64 ADO msado15.dll  (0) 2016.10.28
x64 ADO import  (0) 2016.10.28
MSSQL 테이블명, 컬럼명 검색  (0) 2016.10.27