본문 바로가기

Programming/Tips(C++,C#)143

C++ 메모리 누수 탐지. 원글 (마소독). 오.. 많은 기법이 추가되었다. C++에 손놓은지 벌써 근 10년.. (그동안 C#에 가있었어요) 그사이에 많은 기법이 추가되었다. 우선 공통적인건.. 메모리 누수를 찾기 위해 정보를 달라고 선언해야한다. 뭐.. '추적을 할테니 준비해달라' 이정도 선언? #define _CRTDBG_MAP_ALLOC #include #include 그리고 디버그 정보를 추적할 준비해달라고 했으니 이제 정보를 캐야지. 프로그램 시작점 (전체 프로그램의 시작점. ) _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ); 위 함수를 호출하여 디버그 플래그를 찍는다. 그리고 프로그램의 종료지점 (클래스 소멸자나 함수 끝이 아니다. 프로그램 종료다.).. 2022. 7. 21.
Factory Pattern * 이 글은 C#기준으로 작성하였습니다. Factory Pattern. 같은 인터페이스를 가지는 여러 클래스들을 생성하려고하면.. 이 패턴을 쓰는것이 좋았다. (개인취향임..) 예를 들어, 비슷한 역할을 하는 클래스들이 여러개가 필요하다고 하면.. 이걸 매번 각각의 위치에서 생성하는 것도 하나의 방법이 되겠지만, 이걸 어느 한곳에서만 생성하게 해준다면? 그리고, 해당 클래스들을 사용하는 입장에서는 어느 클래스를 사용해도 동일한 코드를 사용할 수 있다면? 예를 들어, window client프로그램인데, Database에 접속하는 경우를 생각해보자.. MySQL, MS-SQL에 접속한 클래스들을 만든다고 하면? public class MSSQLHandler{ public void Connect(...){ .. 2022. 7. 18.
내 마음대로 짠 로그라이터 일을하면서 로그를 남겨야 할 일이 많아서 이와 같이구현한다. #include #include typedef enum { NORMAL = 0, WARNING = 1, DEBUGMODE = 2, } LogLevel; //로그레벨은 class CLogWriter{ public: CLogWriter(){ } ~CLogWriter(){ } //method public: void InitializeLogWriter(){ //로그라이터 설정 GetWorkDirectory(strCurPath); //현재 디렉토리 가져오는 함수 //로그 경로 만들기. strLogPath.Format(_T("%s\\Log"), strCurPath); if (::PathFileExists(strLogPath) == FALSE){ ::Cre.. 2016. 10. 13.
하드디스크 용량 가져오기 참조 : https://msdn.microsoft.com/ko-kr/library/ms890887.aspx 역시 MS에서는 웬만한건 다 오픈해 준다. 남아있는 하드디스크 용량까지도. 바로... GetDiskFreeSpace (!!!) 함수 원형은 GetDiskFreeSpaceA( LPCSTR lpRootPathName, LPDWORD lpSectorsPerCluster, LPDWORD lpBytesPerSector, LPDWORD lpNumberOfFreeClusters, LPDWORD lpTotalNumberOfClusters ); lpRootPathName : 탐색할 드라이브 경로 (최상위 root) lpSectorsPerCluster : 클러스터당 섹터의 수 lpBytesPerSector : 섹터당.. 2016. 9. 26.
STL에서 map, vector등에 힙에 할당한 객체를 삽입한 경우 STL에서 즉.. new를 이용하여 생성한 객체를 삽입할 경우. 반드시 delete를 해줄것. 예를들어 vector objStruct; for( int i = 0; i < iMax ; i++){ MyStruct *pObj = new MyStruct; objStruct.push_back(pObj); } ... vector::iterator itr; for(itr = objStruct.begin(); itr != objStruct.end(); itr++){ SAFEDELETE(itr); } objStruct.clear(); 뭐.. 대략 위에처럼.. cf. SAFEDELETE는 내가 주로 사용하는 delete관련 코드를 매크로로 만들어둔것. #define SAFEDELETE(X) if( X != NULL){ .. 2016. 9. 26.
C#에서 IE띄워서 핸들링하기 밑에 포스팅에서 작업을 할 때에.. WebBrowser를 사용해서 작업했는데.. ActiveX컨트롤을 불렀을 때 비정상 종료되는 문제가 있었다. (원인은 파악은 안되나. activeX컨트롤이 올라오면 발생했음. 내가 만든 ActiveX가 아니니..) 그래서 차선책(?)으로 IE를 직접 불러서 작업하기로. 해야할 것 1. 웹페이지를 연동한다. (Post전송사용) 2. 페이지가 로딩되면 해당 HTML에 조작(-_-)을 한다. using SHDocVw; using mshtml; -> 이 두개를 사용하기 위해서.. Microsoft HTML ObjectLibrary(mshtml) Microsoft Internet Controls (SHDocVw) 를 참조 추가. 우선 IE를 만들자. 사용방법은 WebBrowse.. 2016. 7. 7.
728x90