일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- atmega328
- preprocessing
- flutter
- memory
- c++
- Read
- inheritance
- Overloading
- mfc
- UNO
- stream
- public
- aduino
- Barcode
- wpf
- Pointer
- Unity
- Android
- digitalRead
- file access
- parameter
- APP
- compare
- Encapusulation
- Class
- Contour
- SERIAL
- sensor
- java
- length
- Today
- Total
목록C, C++, MFC (37)
폴크(FOLC)

MFC C++ 애플리케이션의 성능 향상은?효율적인 알고리즘과 데이터 구조 선택: 적절한 알고리즘과 데이터 구조를 선택하는 것은 성능 최적화의 핵심ex) 정렬이 필요한 경우 퀵 정렬(Quick Sort)이나 병합 정렬(Merge Sort)과 같은 효율적인 알고리즘을 선택데이터 저장에는 std::vector나 std::map 등 적합한 컨테이너를 사용컴파일러 최적화 옵션 활용: 컴파일 시 컴파일러의 최적화 옵션을 활용하면 실행 성능을 향상Visual Studio의 경우 /O2 옵션은 최대 속도를 위한 최적화를 수행/O1 옵션은 코드 크기를 줄이는 최적화를 수행인라인 함수 사용: 짧은 길이의 함수는 인라인으로 선언하여 함수 호출 오버헤드를 줄임.메모리 할당 최소화: 동적 메모리 할당은 성능 저하의 주요 원..

8bit - gray scale 이미지를 24bit color scale 이미지로 표현하는 color map 데이터가 매우 많이 제공한다. OpenCV 에서 기본으로 제공하는 데이터도 있지만 상용 라이브러리들이 제공하는 여러가지 데이터들이 많이 있다. // 컬러맵 룩업 테이블 초기화 (실제 값으로 채워야 함) std::vector matlabColormap(256); void initializeAfmhotColormap() { for (int i = 0; i if (i matlabColormap [i] = cv::Vec3b(0, 0, static_cast(i * 3)); } else if (i matlabColormap [i] ..

무료로 사용할 수 있는 버전들은 아래와 같이 대략 6가지 정도이다.각 컨트롤마다 완전 무료로 공개된 버전도 있지만 64비트에서만 유료로 지원하는 버전도 있다.1. MFC Grid Control (CGridCtrl) - 2015년 2.27 버전2. Ultimate Grid - 2007년 버전 7.3 (2013년에 코드 공개)3. CGridListCtrlEx - 2016년 2.4 버전4. CQuickList - 2006년5. ALX Grid Control - 2025년6. Dapfor MFC Grid - 2010년 2.3.2 버전

# 일반적으로 프로세스간의 데이터를 공유하는 방법 -> IPC : Inter-Process Communication - 윈도우 메시지 전달 방법 - TCP/IP 통신 이용 방법 - 공유 메모리 이용 방법 - 공유 파일 이용 방법 - 등등 # 2개의 PC에서 특정한 데이터를 공유 하고자 하는 경우에 이용한다. -> 공유 파일 이용 방법 -> CFile 클래스 이용 # 소스 코드 struct SHAREDFILEDATA { int AAA; int BBB; }; - 데이터 변경 CString strFileName = _T("D:\\SharedMemFile.XXX"); CFile *pFileMem = new CFile; if (pFileMem) { if (pFileMem->Open(strFileName, CFil..

# 일반적으로 프로세스간의 데이터를 공유하는 방법 -> IPC : Inter-Process Communication - 윈도우 메시지 전달 방법 - TCP/IP 통신 이용 방법 - 공유 메모리 이용 방법 - 공유 파일 이용 방법 - 등등 # 2개의 서로 다른 프로세스에서 특정한 데이터를 공유 하고자 하는 경우에 이용한다. -> 공유 메모리 이용 방법 -> WinAPI ( CreateFileMapping[생성], OpenFileMapping[연결], UnmapViewOfFile[해제] ) 함수를 이용 # 소스 코드 #define SHARED_MEM_NAME _T("shared_mem_test") struct SHAREDMEMDATA { int AAA; int BBB; }; - 생성 m_hHandle = C..

# 일반적으로 프로세스간의 데이터를 공유하는 방법 -> IPC : Inter-Process Communication - 윈도우 메시지 전달 방법 - TCP/IP 통신 이용 방법 - 공유 메모리 이용 방법 - 공유 파일 이용 방법 - 등등 # 2개의 서로 다른 프로세스에서 특정한 데이터를 공유 하고자 하는 경우에 이용한다. -> 윈도우 메시지 전달 방법 -> WM_COPYDATA 구조체를 이용 # 소스 코드 HWND process = ::FindWindow(NULL, _T("XXXXXX")); // 찾는 process 이름 if (process != NULL) { CString Value = _T("1"); // 전송하는 데이터 값 COPYDATASTRUCT data; data.dwData = 0x9999..

# 데이터를 보고 직관적으로 빠르게 파악하여 판단하기 위함 # 공개용 차트 뷰어(ChartDirector)이며, 만료 날짜 없이 제품 평가를 위해서 모든 제품 다운로드 가능 > dll 파일 다운로드 - https://www.advsofteng.com/download.html # 운영체제별로 dll 을 별도로 제공하고 있으며, 32bit/64bit 도 별도로 구분해서 제공하고 있음 > static library 형태는 제공하지 않음. # 관련 dll 파일 다운로드 후 Solution 에 추가하여 연동하면 바로 적용 가능 > 관련 기능에 대한 자세한 사항은 도움말을 참고 > 리소스 뷰어 설정 - Picture Control 추가 하여 Bitmap 으로 Type 을 변경 - CChartViewer 와 연결되는..

# 현재 모니터 화면에서 특정한 영역의 정보를 이미지 파일로 저장 > ATL::CImage 형태를 이용 # MFC 에서 CImage 을 기본으로 제공 # 소스 코드 HDC hdcSrc = ::GetWindowDC(NULL); const int size_x = GetSystemMetrics(SM_CXSCREEN); const int size_y = GetSystemMetrics(SM_CYSCREEN); const int BitpPx = GetDeviceCaps(hdcSrc, BITSPIXEL); CImage image; if (image.Create(size_x, size_y, BitpPx, 1) == TRUE) { BitBlt(image.GetDC(), 0, 0, size_x, size_y, hdcSrc..

# Local 폴더를 Zip 파일을 복원 > ziplib 라이브러리 이용 ( www.info-zip.org ) > BSD license # 소스 코드 bool CFileMakeZip::FileDeComp(CString src, CString dst) { // 연결 HZIP hz = OpenZip(src, 0); if (hz == 0) { return false; } // 해체 ZRESULT zr = UnzipItem(hz, 0, dst); if (zr != ZR_OK) { return false; } // 닫기 zr = CloseZip(hz); if (zr != ZR_OK) { return false; } return true; }

# Local 폴더를 Zip 파일로 생성 > ziplib 라이브러리 이용 ( www.info-zip.org ) > BSD license # 소스 코드 bool CFileMakeZip::FileComp(CString src, CString dst) { // 생성 HZIP hz = CreateZip(dst, 0); if (hz == NULL) { AfxMessageBox(_T("Error: Failed to Create Zip")); } // 추가 - 압축 ZRESULT zr = ZipAdd(hz, src, src); if (zr != ZR_OK) { zr = CloseZip(hz); return false; } // 닫기 zr = CloseZip(hz); if (zr != ZR_OK) { return fa..

# FTP : File Transfer Protocol은 TCP/IP 프로토콜을 가지고 있어서 서버(HOST)와 모듈(CLIENT) 사이의 파일 송/수신 > TCP/IP 프로토콜 테이블의 응용 계층 > 운영 체제가 그래픽 사용자 인터페이스를 갖추기 이전에 개발된 명령 줄 프로그램 > 대부분의 윈도우, 유닉스, 리눅스 운영 체제에 기본 포함되어 있다. # 소스 코드 bool FileUpload(CString host, CString user_id, CString user_pw, int port, int passive, CString local, CString remote) { try { CInternetSession m_session; m_session.SetOption(INTERNET_OPTION_CON..

# FTP : File Transfer Protocol은 TCP/IP 프로토콜을 가지고 있어서 서버(HOST)와 모듈(CLIENT) 사이의 파일 송/수신 > TCP/IP 프로토콜 테이블의 응용 계층 > 운영 체제가 그래픽 사용자 인터페이스를 갖추기 이전에 개발된 명령 줄 프로그램 > 대부분의 윈도우, 유닉스, 리눅스 운영 체제에 기본 포함되어 있다. # 소스 코드 bool FileUpload(CString host, CString user_id, CString user_pw, int port, int passive, CString local, CString remote) { try { CInternetSession m_session; m_session.SetOption(INTERNET_OPTION_CON..

# 네트워크에서 운영되는 HDD 드라이브 > 근거리 통신망으로 네트워크의 선택된 사용자에게 공유 > 표준 디스크 드라이브와 동일하게 액세스를 제공 # 소스 코드 bool CNetworkDrive::ConnectDrive(CString local_name, CString remote_name, CString userID, CString password) { try { NETRESOURCE rc; memset(&rc, 0, sizeof(NETRESOURCE)); rc.dwDisplayType = RESOURCEDISPLAYTYPE_SHARE; rc.dwScope = RESOURCE_GLOBALNET; rc.dwType = RESOURCETYPE_DISK; rc.dwUsage = RESOURCEUSAGE_CO..

# 통신 채널이나 컴퓨터 버스를 거쳐 하나의 비트 단위로 연속적으로 데이터를 전송하는 과정 > 시간으로 나누어 차례대로 전송 > 전송 방식은 동기/비동기 방식으로 나뉜다. - 동기 방식 : 데이터 신호와는 별도로 동기신호를 보낸다. - 비동기 방식 : 데이터 신호만 보내고 각각의 방식에 따라 데이터 비트를 찾는다. # 소스 코드 bool CRS232Serial::OpenPort(CString strPort) { m_osRead.Offset = 0; m_osRead.OffsetHigh = 0; m_osRead.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); if (m_osRead.hEvent == NULL) return false; m_osWrite.Offset = 0;..

# 매우 빠른 C++ 로깅 전용 라이브러리 > 리눅스, FreeBSD, OpenBSD, 솔라리스, AIX, Windows, macOS 등 다양한 언어와 플랫폼을 지원한다. > 파일, 콘솔, DB로 출력할 수 있고 날짜, 파일 크기마다 생성가능하다. # 적용 방법 > https://cppget.org/spdlog/1.9.2 에서 검색 후 설치(download) > 파일 생성 주기를 설정할 수 있다. # 소스 코드 std::shared_ptr m_file; void CSPDLOG::Initialize(CStringA strPath, int dailyLogHour, int dailyLogMinute) { m_file = spdlog::daily_logger_mt("file", strPath, dailyLogH..

# 현재 모니터 화면에서 특정한 영역의 정보를 이미지 파일로 저장 > Bitmap 형태를 이용 # MFC 에서 Bitmap 을 기본으로 제공 # 소스 코드 bool CScreenCapture::CaptureFullscreen() { HDC h_screen_dc = ::GetDC(NULL); int dstX = ::GetDeviceCaps(h_screen_dc, HORZRES); int dstY = ::GetDeviceCaps(h_screen_dc, VERTRES); CaptureROI(h_screen_dc, 0, 0, dstX, dstY); if (NULL != h_screen_dc) ::ReleaseDC(NULL, h_screen_dc); return true; } bool CScreenCapture:..

# 특정 영역에 대해서 CPU 가동에 대한 소요 시간을 확인 > QueryPerformanceCounter 를 이용 # 소스 코드 void CTimeChecker::Reset() { QueryPerformanceFrequency(&m_freq); QueryPerformanceCounter(&m_st); } double CTimeChecker::Elapsed_ms() { QueryPerformanceCounter(&m_ed); double gap = (m_ed.QuadPart - m_st.QuadPart) / m_freq.QuadPart; return gap * 1000.0; // msec }

# MFC를 이용하는 과정에서 HDD 에 존재하는 파일 ( txt format ) 제어 > Save, Load 형태 - CStdioFile 이용 > exe 파일 위치에 test.txt 파일 생성 # 소스 코드 bool CTxTFormHelper::ReadFile(CString strFileName) { std::vector vecParam; CStdioFile file; CFileException e; if (file.Open(strFileName, CFile::modeReadWrite | CFile::typeText, &e) == TRUE) { CString strReadData; while (file.ReadString(strReadData) == TRUE) { vecParam.push_back(st..

# MFC를 이용하는 과정에서 HDD 에 존재하는 파일 ( ini format ) 제어 > Save, Load 형태 - Shlwapi.lib 이용 > exe 파일 위치에 test.ini 파일 생성 # 소스 코드 > #include > #pragma comment(lib, "Shlwapi.lib") GetPrivateProfileInt(szCategory, szKey, nDefValue, m_strFilePath); WritePrivateProfileString(szCategory, szKey, strValue, m_strFilePath); > 읽기/쓰기 부분에 대한 내용을 별도로 wrapping 해서 이용한다. int CINIFormHelper::LoadINT(LPCTSTR szCategory, LPCT..

# MFC를 이용하는 과정에서 HDD 에 존재하는 파일 ( binary format ) 제어 > Save, Load 형태 - Map 형태 이용 > exe 파일 위치에 test.dat 파일 생성 # 소스 코드 m_pdbBinary = new CDataBaseBinary; bool CBINFormHelper::FileLoad() { CFile file; CFileException fe; if (file.Open(m_strFilePath, CFile::modeRead, &fe) == FALSE) { return false; } CArchiveUserDefine ar(&file, CArchive::load); BOOL bReturn = FALSE; if (m_pdbBinary) { delete m_pdbBina..