본문 바로가기

c

DLL을 dumpbin으로 볼 때 함수명 = _함수명 형태로 나올 때 dumpbin이라는 명령어를 사용해서 DLL이 노출하는 함수들을 확인할 수 있습니다.dumpbin은 일반 cmd에서는 실행되지 않습니다.Visual Studio를 설치한 이후에 Tools 메뉴의 Visual Studio Command Prompt에서 실행합니다.실행 방식은 다음과 같습니다. dumpbin /exports Mydll.dll 실행했을 때 다음과 같이 숫자(서수 정보)와 함께 함수명이 출력되는 것이 정상입니다.이렇게 표시되지 않고 함수명이 함수명 = _함수명의 형태로 출력되는 경우가 있습니다.다음과 같이 출력되는 경우입니다.AddFloat와 AddInteger만 표시되어야 하는데 다른 형태로 표시되고 있습니다.이 문제의 해결 방법은 다음과 같습니다.먼저 프로젝트 속성(Alt + F7)의 좌측 .. 더보기
CRect의 DeflateRect() 메소드 CRect는 사각형의 좌표를 저장하고 이 좌표를 더 유용하게 쓸 수 있는 메소드를 갖고 있는 클래스입니다.이 클래스 중에는 DeflateRect()라는 메소드가 존재합니다.이 메소드는 Deflate의 의미(오므라들다, 수축시키다)와 같이 사각형 정보를 줄이는 역할을 합니다.DeflateRect()가 어떻게 찌그러뜨리는지 확인해 보도록 하겠습니다. 간단하게 다이얼로그 기반으로 만들고 OnPaint() 부분을 조금 수정해 줍니다. void CAlwaysOnTopDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, reinterpret_cast(dc.GetS.. 더보기
[C++11] 새로워진 random number 생성 난수(Random number) 생성은 일반적으로 확률 값이 필요한 경우에 사용이 됩니다.프로그래밍을 처음 배울 때, 로또 번호 생성기를 제작할 때 쓰이기도 합니다.그 외에 난수를 기반으로 하는 암호화에도 활용이 됩니다.기존의 난수 생성은 다음과 같습니다. #include #include #include int main() { srand((int)time(0)); int nRand1 = rand(); int nRand2 = rand() % 11; std::cout 더보기
[정렬 알고리즘] 삽입 정렬(Insertion Sort) 정렬 알고리즘인 삽입 정렬입니다.배열의 앞쪽부터 시작해서 순회하면서 정렬을 합니다.그리고 앞 부분의 정렬된 부분에서 선택된 값의 위치를 찾아서 이동시키는 알고리즘입니다.기본적으로 버블 소트나 선택 정렬보다 성능이 좋고 구현이 간편한 장점이 있는 정렬입니다.또한 추가적인 메모리가 크게 필요 없는 In-Place 알고리즘입니다.반복문을 돌리기 위한 변수와 swap을 위한 변수 정도가 추가로 필요합니다.그리고 같은 값이 있을 때 그 순서가 변경되지 않는 안정 정렬입니다.Wiki에서 확인할 수 있는 삽입 정렬의 정렬 방식입니다.http://en.wikipedia.org/wiki/Insertion_sort이 영상이 삽입 정렬의 모든 것을 보여주고 있습니다.두 번째 값부터 시작해서 각각의 값들이 앞부분의 정렬된 부.. 더보기
[정렬 알고리즘] 선택 정렬(Selection Sort) 선택 정렬은 정렬 알고리즘의 한 방법입니다.버블 정렬과 마찬가지로 간단한 정렬 알고리즘에 속합니다.가장 작은(혹은 큰) 값을 찾아서 맨 앞(혹은 맨 뒤)로 차곡차곡 이동시키는 방법입니다.기본적으로 생각할 수 있는 방법으로 정렬합니다.선택 정렬의 코드는 다음과 같습니다. #include using namespace std; template void MySwap(T& a, T &b) { T tmpVal = a; a = b; b = tmpVal; } template void SelectionSort(T* arVal, int nCount) { int maxidx; int i, j; for (i = nCount - 1 ; i >= 0 ; --i) { for (maxidx = i, j = i - 1 ; j >= 0.. 더보기
[정렬 알고리즘] 버블 소트(거품정렬) 버블 소트는 정렬 알고리즘의 한 종류입니다. 정렬 알고리즘은 무작위로 있는 정보를 순차적으로 재배치 시키는 것이 목적입니다. 버블 소트는 각종 정렬 알고리즘 중에서도 기본으로 여겨지는 알고리즘입니다. 정렬 알고리즘은 퀵 정렬, 삽입 정렬, 힙 정렬, 선택 정렬 등 여러가지 방법이 존재합니다. 보통은 속도가 빠른 퀵소트를 많이 사용합니다. 퀵소트를 구현하는데는 재귀 함수 방식이 많이 활용됩니다. 재귀 함수에 대한 설명은 아래 링크에서 확인 가능합니다.2014/12/04 - [Programming/C&C++] - 재귀 함수 & 재귀적 함수호출(recursive function call)그럼 본격적으로 버블 소트에 대해서 알아보도록 하겠습니다. 만약 버블 소트의 코드만 필요하다만 가장 하단의 코드를 참조하시면.. 더보기
가변 인자 함수의 사용법(vprintf, vsprintf) 가변 인자 함수의 내부 구조에 이어서 가변 인자 함수의 사용법을 보도록 하겠습니다.가변 인자 함수의 내부 구조는 다음과 같은 링크에서 확인이 가능합니다.2014/12/07 - [Programming/C&C++] - 가변 인자(Variable Arguments) 내부 구조printf와 유사한 형식으로 문자를 조립해 주는 다음과 같은 함수가 존재합니다.int __cdecl vprintf(const char * _Format, va_list _ArgList); int __cdecl vsprintf(char * _Dest, const char * _Format, va_list _Args);vprintf는 printf와 유사한 동작 방식이고 vsprintf는 sprintf와 유사한 동작 방식입니다.다음의 소스 코.. 더보기
가변 인자(Variable Arguments) 내부 구조 가변 인자 함수는 printf 같이 인자의 형식이나 수가 정해지지 않은 형식의 함수입니다. 제가 예전에 함수 호출 규약을 설명하면서 __cdecl로 호출되는 함수는 가변 인자 함수 호출 방식이라고 설명을 드리면서 호출하는 쪽에서 스택을 정리한다고 했습니다. 이유는 호출당하는 함수에서는 몇 개가 넘어오는 지 알 수가 없기 때문입니다. 혹시 모르시는 분들은 아래 링크를 확인해주세요.2014/11/25 - [Programming/C&C++] - Calling Convention(함수 호출 규약)가변 인자 함수는 말그대로 인자를 변경 가능할 수 있다는 의미입니다. 가장 자주 사용하게 되는 것은 printf류의함수가 아닐까 생각됩니다. Visual Studio에서 printf를 입력해 보았습니다. const ch.. 더보기