일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- inheritance
- wpf
- Contour
- mfc
- memory
- Binary
- parameter
- Android
- file access
- compare
- stream
- aduino
- UNO
- SERIAL
- Barcode
- Read
- length
- Overloading
- digitalRead
- Unity
- Encapusulation
- java
- sensor
- APP
- Class
- preprocessing
- public
- atmega328
- Pointer
- flutter
- Today
- Total
목록C, C++, MFC/C, C++, MFC 테크닉 (29)
폴크(FOLC)
# 일반적으로 프로세스간의 데이터를 공유하는 방법 -> 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..
# TCP/IP 로 통신을 진행하는 상태 확인 > 1:1, 1:N, N:1 > 통신 연결을 사용하고 있는 PC 의 socket 에 직접 데이터를 전달 - 약속된 파라미터 값을 전달 # Socket 에서 약속된 파라미터 값을 설정된 시간 동안 데이터 송/수신이 없는 경우 socket 을 제거하고 연결 상태를 해제 시킨다. ( 리소스 삭제 ) > 별도의 Thread 로 파라미터를 송신, OnReceive 에서 파라미터 수신 > 비 정상 종료로 인해서 socket 을 사용하지 못하는 경우 ( 예외 처리 용 ) > LanCable 을 제거 했거나 통신 선로 상의 문제가 발생하는 경우 ( 예외 처리 용 ) # 소스 코드 ( CSocket 상속 받은 클래스 ) // 약속된 파라미터 전송 - 3초 간격 UINT CC..
# CSocket 을 사용하면서 OnReceive(), OnClose() 함수가 정상적으로 호출이 발생하지 않는 상황 > 윈속 으로 직접 만들어서 데이터 송/수신 > 통신 event 가 발생한 경우에만 데이터 연동 # 윈속 사용하기 위해서 필요한 내용 > #include // MFC 소켓 확장 > AfxSocketInit(); # 소스 코드 내용 CString m_strServerIP = _T("127.0.0.1"); int m_nServerPort = 7000; // 윈속 초기화 WSADATA wsa; int ret = WSAStartup(MAKEWORD(2, 2), &wsa); if(ret != NO_ERROR) { //wprintf(_T("WSAStartup function failed with e..
# OOP(Object Oriented Programming) 객체 지향 프로그래밍은 컴퓨터 프로그래밍의 패러다임 > 컴퓨터 프로그램을 여러 개의 독립된 객체들의 모임으로 봄. > 각각의 객체는 서로 메시지를 주고 받고 데이터를 처리한다. # OOP 는 프로그램을 유연하고 변경이 쉽게 만든다. > 대규모 소프트웨어 개발에 많이 사용 > 프로그래밍을 더 배우기 쉽게 하고 개발 및 유지 보수가 간편 > 보다 직관적인 코드 분석을 가능 # 객체의 단위를 대표하는 것은 class, struct > class 와 struct 는 매우 흡사하며 운영 방법은 동일 > 한가지 차이점은 접근 지정자의 적용 방식 - class : private ( 지정자를 설정하지 않으면 기본적으로 반영됨 ) - struct : publ..