본문 바로가기

Programming/MFC

VS2013 mfc static bitmap 추가시 버그 (error RC2108: expected numerical dialog constant) 출처 : http://fantaziulo.blog.me/220208647844 인터넷에서 돌아다니는 오픈소스를 받아서 개발하는 도중에 아래와 같은 에러가 발생하였다.error RC2108: expected numerical dialog constant PUSHBUTTON 에서 에러가 나길래 아래와 같이 수정했는데도 에러가 났다...문제는 PUSH BUTTON 이 아니라 PUSH BUTTON 위에 CONTROL이 있었는데 해당 CONTROL을 아래와 같이 수정하면 된다 오류 : CONTROL "",IDC_CHARTVIEWER0,91,52,15,13,NOT WS_GROUP정상 : CONTROL "",IDC_CHARTVIEWER0,"Static",SS_BITMAP,119,1,15,13 vs2013에서 mfc에.. 더보기
[MFC] CString 문자열 파싱하기 오늘은 문자열 파싱에 대해서 간단히 정리한다.문자열 파싱이란 하나의 문자열에서 각각의 문자들을 분리하는 과정이라고 생각하면 된다.이 과정을 통해 긴 문자열에서 원하는 문자만 뽑아 임의의 변수로 저장하여 사용할 수 있다. 방법 1. AfxExtractSubString() 함수 이용AfxExtractSubString() 함수를 이용하여 간단하게 문자열을 분리할 수 있다.다음 예제를 살펴보자 예제 1)123456CString str = "118.131.90.22"; //파싱할 문자열CString strA, strB, strC, strD; //파싱되는 문자열을 담을 변수선언AfxExtractSubString(strA, str, 0, '.'); // strA == "118"AfxExtractSubString(st.. 더보기
CString to char 출처 : http://lowchen.tistory.com/288123456CString strTemp = "This is test.";char szTemp[256] = {0}; memcpy( szTemp, strTemp, strTemp.GetLength() ); memcpy( szTemp, strTemp.GetBuffer(0), strTemp.GetLength() );cs 위의 두 memcpy는 같은 동작을 수행한다. 더보기
[winapi] DC에 대해서...(GetDC / BeginPaint) ### DC (Device Context) ### ** DC란?cairo로 windows에 그림을 그릴때도 Windows DC가 필요하다.때문에 WinAPI의 DC에 대해서 알 필요가 있다. # 기초부터 짚고 넘어가보자Windows는 3개의 DLL(동적 연결 라이브러리)로 구성되어 있다. - KERNEL : 메모리 관리 및 프로그램 실행 - USER : 유저 인터페이스와 윈도우 관리 - GDI : 화면 처리와 그래픽 담당 Windows API 함수 대부분은 이 세가지 DLL에 의해 제공되는 것이다. 즉, Windows의 클라이언트 영역에 그리기를 하려면 이 GDI(Graphics Device Interface) 함수를 사용해야 한다.그리고 HDC는 'Handle to a Device Context' 로 .. 더보기
timeSetEvent 64bit 오류 출처 : https://social.msdn.microsoft.com/Forums/vstudio/en-US/1d3f07b8-eb79-4127-a170-cbda5570b244/compilation-error-while-calling-timesetevent-during-64-bit-code-generation-using-vc-2008?forum=vclanguage 32bit에서 사용하던 timeSetEvent 함수가 64bit환경으로 버전업 할 경우 다음과 같은 에러가 발생한다. My problem is I am getting a compilation error message from a call to function timeSetEvent() like Error 1 error C2664: 'timeSetE.. 더보기
MFC app MANIFEST for x64 including x86 COMCTL32.dll 출처 : https://msdn.microsoft.com/en-us/library/bb773175(VS.85).aspx 인터넷에서 받은 소켓 통신하는 MFC 프로그램(32bit)을 실행하였더니 정상적으로 실행이 되었다. x64로 플랫폼을 변경 후 정상 빌드는 됐지만 0xc000007b라는 에러코드를 발생하며 런타임 에러를 뿜어냈다. 3일 동안 정말 많은 검색을 하였고 150개 정도의 웹 페이지를 보았다. 그 중 한 사이트에서 아래와 같은 메시지를 볼 수 있었다. 하지만 MFC를 많이 개발해보지 않은 나로써는 무슨 말인지 정확히 알지 못하였다. 메시지 대로 Dependency Walker도 이미 실행해봤지만 COMCTL32.dll만 x86으로 dll을 로드하고 있었다.설명Project not explici.. 더보기
MFC 프로젝트 속성 > 구성 속성 출처 : http://blog.naver.com/chollikyo/10166698586 일반 입력 디렉터리 : 링커와 같은 도구에서 빌드 프로세스 중에 만들어진 모든 최종 출력 파일을 배치할 디렉터리를 지정 중간 디렉터리 : 컴파일러와 같은 같은 도구에서 빌드 프로세스 중에 만들어진 모든 중간 파일을 배치할 디렉터리를 지정 대상 이름 : 이 프로젝트가 생성하는 파일 이름을 지정 매크로설명$(SolutionDir)솔루션의 디렉터리(드라이브+경로). 이 경로에는 뒤에 \를 붙여야 함.$(Configuration)현재 프로젝트 구성의 이름(예: "Debug")$(ProjectName)프로젝트의 기본 이름.$(RemoteMachine)디버그 속성 페이지에서 Remote Machine 속성의 값으로 설정.$(Pl.. 더보기
런타임 라이브러리 (Run-time Libraries) 2. 런타임 라이브러리 (Run-time Libraries) 이 테이블은 Visual C++ 과 함께 제공되는 라이브러리와 Pre-Compiled Object 들의 기능에 대한 짧은 설명을 보여줍니다. ------------------------------------------------------------------------------런타임 라이브러리 (Run-time Libraries)------------------------------------------------------------------------------ 파일설명 Advapi32.lib 레지스트리나 보안 관련 API 같은 진보된 API 서비스 들에 대한 임포트 라이브러리 입니다. 이 임포트 라이브러리와 링크하는 것은 당신의 프로.. 더보기
CFile Class 출처 : http://jogook21.tistory.com/entry/CFile-Class CFile::modeRead 읽기모드 CFile::modeWrite 쓰기모드 CFile::modeCreate | CFILE::modeWrite 파일 생성후 쓰기 CFile::modeNoTruncate 파일 존재시 생성하지 않음 CFile::modeReadWrite 읽고 쓰기모드 CFile::typeBinary 바이너리타입 CFile::typeText 텍스트타입 CFile::modeCreate | CFile::modeReadWrite 기존파일 삭제 후 생성 CFile::modeReadWrite | CFile::modeNotruncate 기존파일 보존 후 읽고 쓰기 멤버함수의미CFile() Abort() Duplica.. 더보기
C2664 : CString Format 에러 대처법 출처 : http://blog.naver.com/melugi/80105665180 에러메시지MFC 환경을 유니코드로 설정했을때 나타나게 되는 메시지이다error C2664: 'void ATL::CStringT::Format(const wchar_t *,...)' : 매개 변수 1을(를) 'const char [11]'에서 'const wchar_t *'(으)로 변환할 수 없습니다. with [ BaseType=wchar_t, StringTraits=StrTraitMFC_DLL ] 가리킨 형식이 관련이 없습니다. 변환하려면 reinterpret_cast, C 스타일 캐스트 또는 함수 스타일 캐스트가 필요합니다. 대처법 기존의 코드CString str; str.Format("%c", ch); 다음과 같이 _.. 더보기
충격 AfxGetMainWnd() 함수 출처 : http://egloos.zum.com/xuny/v/2078275 전에 Visual Studio 6.0 으로 작성하던 mfc 프로그램을 Visual Studio 2008 로 변환을 하였다. 보안이 강화됐는지 어쨌는지.. 수없이 많은 wanning 이 뜨고.. 젠장.. 사용하지 말기를 권고하는 함수들에 대해서 안전한 함수로 교체를 하였다.. 이거야 내 전문인 복사 컨트롤+V 이니.. 별 어려움이 없었는데.. MFC 6.0 으로 컴파일을 하면 분명히 실행이 되는 코드가 2008 에서 컴파일 하니 조낸 안되는 거였다. 디버깅을 해보니 범인은 AfxGetMainWnd() 함수 MFC 에서 윈도우간 통신을 위하여 저런 함수는 많이 사용되고 있는데.. 저 함수가 실행될때마다 다른 주소가 리턴이 되는걸 발견.. 더보기
error C2661: 'pcl::PointCloud<PointT>::operator new' : no overloaded function takes 3 arguments PCL 라이브러리를 사용하다보니 아래와 같은 오류가 발생하였다.error C2661: 'pcl::PointCloud::operator new' : no overloaded function takes 3 arguments PCL 라이브러리에서 제시한 방법으로 선언을 했지만 어이가 없게도 new 연산자에서 오류가 난다....PointCloud::Ptr cloud(new PointCloud);// x, y, z, r, g, b 구글링을 해보니 잘 나오지 않았는데 www.pcl-user.org 에서 heap을 늘려보라는 생각치도 못한 답변이.... 프로젝트의 속성 > C/C++ > 명령줄의 추가 옵션 부분에 /Zm1000를 입력하고 확인 버튼을 누르니 놀랍게도 오류가 사라졌다....factor의 값메모리 할당 .. 더보기
error C3859: PCH에 대한 가상 메모리 범위를 초과했습니다.에러 출처 : http://blog.naver.com/PostView.nhn?blogId=jinlee25&logNo=40088677597 error C3859: PCH에 대한 가상 메모리 범위를 초과했습니다. 명령줄 옵션을 '-Zm값' 이상으로 지정하여 다시 컴파일하십시오.fatal error C1076: 컴파일러 한계 : 내부 힙 한계에 도달했습니다. /Zm을 사용하여 한계를 더 높게 지정하십시오.툴만들려고 하니 날 당황스럽게 한 에러.위에러는 미리컴파일한 헤더 결과 용량이.. 미리 컴파일한 헤더 이용할때 생기는 PCH파일 할당용량이 보다 더 크게 될때 발생한다고 한다.(이렇게 쓰니 좀 이상해지네 아무튼 PCH 용량부족하다고VS가 츤츤데는것다)(미리 컴파일해 놓은 결과인 PCH 파일을 사용한다.)당황하지말고.. 더보기
error C2589 에 대한 고찰과 문제 해결방법 출처 : http://tommyhsm.tistory.com/100 MFC에서 PCL을 사용하려고 작업하는 중에, 다음과 같은 에러가 떴다. ...Warning C4003: 'max' 매크로의 실제 매개 변수가 부족합니다.error C2589: '(' : '::' 오른쪽에 잘못된 토큰이 있습니다.error C2988: 템플릿 선언/정의를 인식할 수 없습니다.error C2059: 구문 오류 : '::'... 도대체 뭐가 문제일까.. 하면서 고민 하던 중, 공통점은 max 매크로의 실제 매개 변수가 부족하다 라는 공통된 경고를 깨닫게 되었고, error C2589로 검색을 하던중, 한 블로그에 들어가서 문제점과 해결방법을 알게 되었다. 참조 블로그 링크 : http://blog.naver.com/smurfe.. 더보기
MFC에서 Web Browser Control을 사용했을 때 IE버전이 다를 경우 Script Error가 발생할 때가 있는데 PC는 64bit일 때 출처 : http://www.cnblogs.com/philzhou/archive/2012/12/02/2798204.html 위의 사이트에 들어가보면 영어로 쏼라쏼라 돼있다....구글링해서 많은 한글 사이트를 뒤져보다보면 아래와 같은 레지스트리 경로에 "자신의 어플리케이션.exe" 형태로 DWORD를 등록하라고 나온다.등록했지만 해결이 되지 않았다.... 끈질긴 구글링 끝에 해결책을 찾았다... 나는 현재 64bit 환경에서 개발을 하고 있기때문에 아래의 64bit 일 때의 경로에 "자신의 어플리케이션.exe" 형태로 DWORD를 등록하고 값(Value)은 자신의 Internet Explorer 버전 x 1000을 써주면 된다(물론 10진수 형태로... IE 11을 사용할 경우 11000) There ar.. 더보기
MFC에서 콘솔(console) 출력하기 출처 : http://stupidmb.tistory.com/41 MFC 프로젝트에 보면 stdafx.cpp 있잖아요? 거기에... #pragma comment(linker, "/entry:WinMainCRTStartup /subsystem:console") 추가하면 실행시 콘솔창이 뜨고 거기에 printf 등의 결과가 출력됨~~ 끄읏~ 더보기