본문 바로가기

c++25

프로세스 이름으로 PID 번호 구하기 이름으로 해당 프로세스의 PID 번호를 구하는 방법입니다. 위 작업 관리자 캡처 화면의 경우 Notepad.exe의 PID는 5528입니다. 그런데 이 번호는 메모장이 실행될 때마다 변경되기 때문에 PID가 필요한 경우 유용하게 사용할 수 있습니다. #include #include DWORD GetProcessByFileName(LPWSTR name) { DWORD process_id_array[1024]; DWORD bytes_returned; DWORD num_processes; HANDLE hProcess; WCHAR image_name[MAX_PATH] = { 0, }; DWORD i; EnumProcesses(process_id_array, 1024 * sizeof(DWORD), &bytes_r.. 2021. 8. 18.
inline 함수 인라인 함수는 함수를 호출하는데 소요되는 자원을 최소화하기 위해서 호출될 함수 블록 전체를 프로그램과 한 몸처럼 컴파일해서 실행되도록 하는 함수를 말합니다. 일반적인 함수는 특정 위치에 컴파일된 함수가 위치하고 호출이 될 때마다 함수가 있는 곳으로 와서 함수를 수행하고 다시 원래 프로그램으로 돌아가는 식으로 동작하지만 인라인 함수는 호출되는 위치들마다 함수 블록들이 위치하고 있어서 그 자리에서 바로 실행되는 것처럼 수행된다고 하네요. 오픈소스 프로젝트로 공부하다 보면 아래 사진처럼 inline이라는 키워드로 시작하는 함수를 종종 볼 수 있습니다. 바로 이런 형태가 인라인 함수가 사용된 부분인데요. 함수 선언할 때 맨 앞에 "inline"이라는 키워드만 추가해서 사용할 수 있습니다. 인라인 함수는 언제 사.. 2021. 4. 16.
문자열 상호 형변환, char* ↔ std::string ↔ CString ↔ std::stringstream 문자열간 형변환 방법입니다. 워낙 많이 쓰이기 때문에 자료가 많긴하지만 매번 찾아보는것도 귀찮아서 정리했습니다. char* ↔ std::string char* to string #include char c[256] = "Hi there"; std::string str(c); // OR std::string str = c; string to char* #include std::string str = "Hi there"; const char* c = str.c_str(); string 을 char* 로 변환하기 위해서는 const char*을 사용해야 함. 이경우 당연히 수정이 불가능 수정가능한 문자열로 만들고 싶을때는 동적할당을 통한 메모리 복사를 해야함 #include std::string str = ".. 2019. 10. 22.
strcpy_s, wcscpy_s, _mbscpy_s, _tcscpy_s - 문자열 복사 strcpy_s, wcscpy_s, _mbscpy_s, _tcscpy_s 용도 문자열을 복사하는데 사용하고 strcpy함수의 보안이 강화된 버전 구문 #include #include // _mbscpy_s 함수용 template // Template functions are C++ only: errno_t strcpy_s(char (&dest)[size], const char *src); template errno_t wcscpy_s(wchar_t (&dest)[size], const wchar_t *src); template errno_t _mbscpy_s(unsigned char (&dest)[size], const unsigned char *src); template errno_t _mbscpy_s.. 2019. 10. 15.
[라이브러리] C++ 라이브러리, Boost 빌드하고 사용하기 Boost Libraries C++ 개발자라면 누구나 사용한다는 "Boost"를 이제서야 알게되어 설치(?)를 해 봤습니다. 공식 홈페이지에서 필요한 자료들을 받아서 빌드하고 Visual Studio에서 사용할 수 있도록 하는 방법입니다. Boost C++ Libraries Welcome to Boost.org! Boost provides free peer-reviewed portable C++ source libraries. We emphasize libraries that work well with the C++ Standard Library. Boost libraries are intended to be widely useful, and usable across a broad spectrum of .. 2019. 10. 8.
MFC그래프 라이브러리, ChartCtrl 마우스 휠 기능 추가 C++/MFC에서 다양한 그래프를 손쉽게 그릴수 있도록 해주는 오픈소스 라이브러리인 ChartCtrl 관련 포스팅입니다. 해당 라이브러리에 대한 소개와 간단 사용법은 관련 포스팅에서 확인해 주세요. 'ChartCtrl' 태그의 글 목록 블로그 EveryX 입니다. C++, Python, Arduino등 학습노트로 시작했고, 신기하고 재미있는 제품 리뷰와 맛집/여행에 대한 추억도 남기고 있습니다. kwonkyo.tistory.com 이 라이브러리는 정말 잘 만들어진 라이브러리라서 다양한 기능들이 구현이 되어 있어 사용하기에 편리합니다. 그런데 사용을 하다보면 아쉬는 기능이 하나둘 보이기마련이죠. 이럴때 이런 오픈소스 라이브러리의 잠재력이 드러납니다. 오래 된 코드이긴 하지만 프로그래밍을 배우고 있는 입장에.. 2019. 10. 7.
MFC 그래프 라이브러리, Chart Control 기본 사용법 - 보통그래프 및 봉차트 그리기 이전 포스팅에서 소개했던 그래프를 그려주는 MFC 라이브러리, Chart Control의 기본 사용법입니다. CodeProject에도 기본 사용법이 잘 나와있지만 저같은 초보는 맘먹고 정독해야 겨우 이해할 수 있기 때문에 그 겨우 이해한 내용을 기록으로 남깁니다. 라이브러리 소스는 아래 포스팅 참고하시면 됩니다. [라이브러리] MFC 그래프 라이브러리 - High-speed Charting Control MFC용 그래프 그리는 라이브러리를 소개합니다. Codeproject사이트에 등록된 소스인데 X-Y 기본 그래프 뿐만아니라 캔들스틱, 바차트 등 다양한 기능을 지원하는 라이브러리 입니다. 원본 출처: https://www.cod.. kwonkyo.tistory.com Chart Control 라이브러리를.. 2019. 10. 5.
[라이브러리] MFC 그래프 라이브러리 - High-speed Charting Control (ChartCtrl) MFC용 그래프 그리는 라이브러리를 소개합니다. Codeproject사이트에 등록된 소스인데 X-Y 기본 그래프 뿐만아니라 캔들스틱, 바차트 등 다양한 기능을 지원하는 라이브러리 입니다. 소스 출처: https://www.codeproject.com/Articles/14075/High-speed-Charting-Control 제작자가 공개한 라이브러리의 원본파일입니다. Codeproject사이트에서 직접받을 수도 있지만 혹시나 없어질까봐 하나 받아두었습니다. 그리고 원본소스는 컴파이시에 유니코드 주의가 발생해서 아래는 유니코드로 다시 저장한 버전입니다. 코드내용은 동일합니다. 사용조건 다음은 제작자가 허용한 소스이 사용조건입니다. 기본적으로 상업적 이용도 허용한다고 하네요. This code may be.. 2019. 9. 20.
fscanf_s, fwscanf_s, fscanf_s, _ftscanf_s - 형식이 정해진 문자열 읽기 fscanf_s, fwscanf_s, fscanf_s, _ftscanf_s 용도 형식이 정해진(formatted) 문자열에서 데이터를 읽을때 사용하는 함수 구문 #include int fscanf_s( FILE *stream, const char *format [, argument ]... ); int _fscanf_s_l( FILE *stream, const char *format, locale_t locale [, argument ]... ); int fwscanf_s( FILE *stream, const wchar_t *format [, argument ]... ); int _fwscanf_s_l( FILE *stream, const wchar_t *format, locale_t locale [, .. 2019. 9. 19.
C++ 동적 메모리 (Dynamic Memory) 할당 필요성 동적할당이 왜 필요할까요? 동적메모리 할당은입력갑에 의존적인 프로그램을 만들어야 할 경우 유용하게 쓰일 수 있습니다. 예를들어 사진이나 영상 등 어떤 파일을 읽어야 하는데 읽기 전에는 그 크기를 모르기 때문에 메모리에 얼마나 공간이 필요한지 알수가 없는데 이럴때는 동적할당이 꼭 필요합니다. 다음과 같은 코드를 컴파일 해보면 컴파일 에러가 납니다. int i = 5; int arr[i]; i라는 변수에 5가 할당되니까 정수형 배열 “arr[i]”은 정수형 x 5개 만큼의 크기가 필요하다는 것이 자명한데 왜 에러가 날까요? 이유는 컴파일시에 변수 i 가 정수형이라는 것만 정해지지 여기에 값 5가 들어가는건 프로그램이 실행될 단계에서 일어나는 일이라고 합니다. 그래서 컴파일러는 “i”에 뭐가 들어가있는.. 2019. 2. 28.
[C++/MFC 핵심노트] Class (클래스) 접근범위 제한 - PART 2 클래스 두번째 파트입니다. 클래스에서 또하나 중요한 개념인 접근범위 제한에 대해서 정리해 보겠습니다. 클래스가 만들어지면 그 용도에 따라 다양한 형태로 사용될 수 있는데, 클래스를 설계한 사람이 어떻게 내부구조를 만드느냐에 따라 어떤 멤버는 클래스 내부에서만 사용가능하고 어떤 멤버는 외부에서도 바로 접근할 수 있도록 만들수도 있습니다. 만약 이런 제한이 없다면 클래스는 단순히 코드의 가독성을 높여주기 위한 도구 정도에 불과할텐데, 클래스의 인터페이스를 클래스 설계자가 의도한 대로 제한함으로써 사용시 오류도 줄이고 코딩의 생산성도 높이는 효과를 얻을 수 있습니다. (저는 그리 복잡한 코딩을 해본적인 없기 때문에 대부분 public으로 사용해서 크게 와닫는 부분은 없었습니다.) 클래스 접근범위 제한 지금부터.. 2019. 1. 10.
[컴파일 오답노트] error C2440 ON_WM_NCHITTEST 에러 인터넷에서 찾은 오래전에 만들어진 어떤 소스를 컴파일 하려는데 에러가 발생했습니다. 에러메시지는 error C2440: 'static_cast': 'UINT (__thiscall CACListWnd::* )(CPoint)'에서 'LRESULT (__thiscall CWnd::* )(CPoint)'(으)로 변환할 수 없습니다. note: 기본 형식에서 파생 형식으로 캐스트하려면 dynamic_cast 또는 static_cast가 필요합니다. 앞뒤로 형이 맞지 않는다는 내용인거 같은데 뭔말인지 잘 모르겠습니다. 에러가 발생한 부분은 메시지 맵에서 "ON_WM_NCHITTEST()" 부분이었습니다. BEGIN_MESSAGE_MAP(CACListWnd, CWnd) ON_WM_NCHITTEST() END_MESS.. 2019. 1. 3.
strlen / wcslen / _mbslen / _tcsnlen - 문자수 반환 strlen, wcslen, _mbslen, _tcslen 용도 문자열에 포함된 문자의 개수를 반환 구문 #include size_t strlen(const char *string); size_t wcslen(const wchar_t *string); #include size_t _mbslen(const unsigned char *string); size_t _mbslen_l(const unsigned char *string, _locale_t locale); 매개변수 string Null로 종료되는 문자열 locale locale 반환 문자열 안에 포함된 문자의 갯수를 반환함. null은 제외. 에러에 대한 별도 반환이 지정되어 있지 않습니다. 추가설명 T캐릭터 함수를 사용하면 아래와 같이 호출됩니다... 2018. 12. 20.
HTML Parcer 예제프로그램 분석과 코드 활용방안 Intro 이전 글에서 CodeProject.com에서 받은 코드를 컴파일하는 간단한 방법을 소개한 적이 있었는데 그때 받았던 코드를 본인의 프로그램에 사용하기 위해서 나름대로 로직을 분석한 결과를 정리해 두려 합니다. CodeProject.com에서 다운받은 C++ 프로젝트 컴파일 하는 방법 다운받았던 프로그램은 "HtmlParser"라는 프로그램으로 웹페이지 주소를 넣으면 해당 코드를 받아와서 HTML 코드를 분석해서 코드의 계층구조를 트리 형태로 시각화 시켜주고 원하는 특정 태그나 속성을 필터링 할 수도 있는 그런 기능을 합니다. 저는 전자공시 사이트인 Dart에서 필요한 기업정보를 가져오기 위해서 웹페이지 크롤링 방법을 고민하고 있는 중입니다. 당현히 HTML파싱이 빠질수 없기 때문에 잘 만들어진.. 2018. 12. 4.
isalum / iswalnum / _ismbcalnum / _istalnum - 정수값이 영어,숫자인지 확인 isalum, iswalnum, _ismbcalnum, _istalnum 용도 확인하고자 하는 문자의 정수값이 영어나 숫자를 나타내는지를 확인 구문 #include int isalnum(int c); int iswalnum(wint_t c); int _isalnum_l(int c, _locale_t locale); int _iswalnum_l(wint_t c, _locale_t locale); #include int iswalnum(wint_t c); int _iswalnum_l(wint_t c, _locale_t locale); #include int _ismbcalnum(unsigned int c); #include int _istalnum(_TINT c); 매개변수 c 확인할 문자의 정수값 loca.. 2018. 11. 30.