C, C++ 문법 28

DLL - 함수 호출시 __declspec(dllimport)의 사용과 미사용간 코드생성 차이점

DLL - 함수 호출시 __declspec(dllimport)의 사용Level of Difficulty 1 2 3 DLL을 통해서 API를 제공하기 위해서 DLL(PE)의 Export Table에 함수를 나타내도록 __declspec(dllexport)지시자를 사용합니다.반면에 함수를 호출하는 쪽에서는 특별히 __declspec(dllimport)으로 정의된 함수원형을 사용하지 않아도 DLL에서 제공된 함수를 사용 할 수 있습니다.결론 부터 말씀드리면 DLL에서 제공되는 함수를 사용할 때에는 함수선언 앞에 __declspec(dllimport) 지시자를 사용할 것을 강력히 권합니다.대부분 DLL의 API는 헤더에서 다음과 같이 선언 되어있습니다.// API Export/Import Header#ifdef..

C, C++ 문법 2008.09.02

__declspec( selectany ) declarator

아래글을 요약하자면, 여러번 정의가 된 경우, 아무거나 하나 고른다... 헤더파일에 선언뿐 아니라 정의까지 넣는 경우 중복 문제로 컴파일이 되지 않는데 그런 경우 쓰면 좋다... 실제로 component의 작성시 헤더화일에 위 지시자를 쓰면서 guid 정의를 같이 하는 경우가 있다. extern "C" const GUID __declspec(selectany) LIBID_MYCTRLLib = {0xcd886b0a,0x2d92,0x40fe,{0xb0,0x1f,0x72,0x83,0x6c,0x14,0x3e,0xe2}}; extern "C" const GUID __declspec(selectany) CLSID_MyTest = {0x66483f99,0x21ff,0x45a0,{0xa5,0xcc,0x75,0xa2,0..

C, C++ 문법 2008.09.02

#undef THIS_FILE ...이게 먼가여?

#undef THIS_FILE ...이게 먼가여? #undef THIS_FILE 기존에 THIS_FILE이 정의 되었을시 다시 재 정의 하겠다는 뜻입니다. 재정의가 아니고 원칙적인 뜻은 무효화하는 것이다. __FILE__은 ANSI가 정의한 미리 정의된 매크로로서 현재 소스 파일의 이름과 행 번호를 의미하는 매크로 입니다. ex) 1.cpp라는 소스파일로 저장했을시 printf(""%s\n",__FILE__); 하면 결과는 %PATH%1.cpp라는 결과를 얻게 됩니다. __FILE__ 는 이러한 특성상 디버그용으로 많이 쓰입니다. 하지만, 문제점이 있는데 __FILE__경우 a.cpp b.cpp 중 a.cpp가 #include b.cpp했을 경우 매크로의 확장 후에 컴파일 되기 때문에 __FILE__이 ..

C, C++ 문법 2008.09.01

문자열(스트링) 전격 분석

백택 (bektekk@yahoo.co.kr) 홈페이지 : http://bektekk.wo.to 문자열(스트링) 전격 분석1강 본강좌는 코드 프로젝트에 제가 좋아하는 프로그래머인 Michael Dunn의 강좌 The Complete Guide to C++ Strings, Part I 과 II 를 번역한 글입니다. 최대한 의역을 하려고 노력했지만, 이런쪽의 경험이 부족하다 보니 많이 모자란 강좌가 되겠지만, 많은 도움이 되셨으면 합니다. 기타 문의 사항이나 질문은 쪽지나 메일을 이용해 주셨으면 합니다. 본강좌는 제 홈페이지(위의 링크)를 통해서도 보실수 있습니다. 사실 이글은 Part I/II 두 강의로 구성이 되있지만 제 역량이 모자라는 관계로 더 잘게 쪼개 여러강좌로 재구성하겠습니다. 소개 프로그래밍 작..

C, C++ 문법 2008.09.01

논리상 생성자에서 처리해도 되는 것을 Init 함수를 따로 빼서 사용하는 이유

생성자는 리턴값을 따로 두지 않는다. 에러를 조사하고자 하는 경우는 리턴값으로 확인할 수 없다. 그래서 초기화 함수를 따로 빼서 코딩해야하는 경우가 있다. 컴포넌트 관련 코딩에서 많이 발견된다. 물론 객체 생성후 항상 Init함수를 호출해준다. 다음은 그 예이다. // 생성자 COEnumConnections::COEnumConnections( IUnknown* pHostObj) { // Zero the COM object's reference count. m_cRefs = 0; // Assign the Host Object pointer. m_pHostObj = pHostObj; // Initialize the Connection Point enumerator variables. m_iEnumIndex ..

C, C++ 문법 2008.08.27

* 헝가리언 표기법(Hungarian notation)

* 헝가리언 표기법(Hungarian notation) 10, 15년 전 Microsoft의 개발자 중 헝가리 사람의 프로그래머가 쓰던 변수 명명법. MS내부에서 따라 쓰기 시작하던 것이 점차 전세계의 프로그래머들에게 널리 퍼져 이젠 프로그램 코딩 시 변수 명명의 표준적인 관례가 되었다. 그러나 실제로 현장에서 일하다 보면 헝가리언 표기법을 제대로 지키는 개발자는 그리 많지 않다. 어느 정도 개발 경험을 가지고 있는 프로그래머는 물론 심지어 시중의 프로그래밍 서적에서 조차 저자마다 변수명을 개인에 따라 가지각색으로 짓고 있어서 처음 프로그램을 배우는 입문자들이 변수 명명에 대한 기준을 제대로 잡지 못하고 있는 실정이다. 솔직히 필자도 얼마전까지 이런 변수 명명에 대한 관례를 잘 지키지 않았다. 그러나 변..

C, C++ 문법 2008.08.27

C++ 심화학습

C++ 을 공부하시려는 분들은 아래내용은 필수 인듯 합니다. 참조 하시길 바랍니다... ㅎㅎㅎ C++ 은 현존하는 언어중 가장 배워야 할것이 많은 언어중 하나임이 자명합니다 ㅡ,.ㅡ;; 저도 아래 내용을 현재 보고 있습니다. 이거 본다고 C++ 끝이 아님... 원래 내용은 엠아이랩(http://www.milab.co.kr/) 에 있는거 같은데 ^^ 하여튼 아래 링크를 타면 볼수 있습니다. C++ 핵심정리 - 결론과 미래 (2) | 2006/07/29 C++ 핵심정리 - 결론과 미래 (1) | 2006/07/29 C++ 핵심정리 - C 언어와의 호환성 문제들 (3) | 2006/07/29 C++ 핵심정리 - C 언어와의 호환성 문제들 (2) | 2006/07/29 C++ 핵심정리 - C 언어와의 호환성 문..

C, C++ 문법 2008.07.29

Win32 아키텍처 완전 해부 ?

Win32 아키텍처 완전 해부 ? 가상 메모리 이번 호에서는 윈도우 32 아키텍처의 또 다른 면모인 메모리에 대해 공부하면서 윈도우 32의 메모리는 어떻게 구성되어 있으며 윈도우 32 시스템은 어떤 규칙으로 프로그램에 메모리를 지정하는지, 그리고 이미 지정된 가상 메모리의 상태와 현재 구성은 어떻게 알 수 있는지에 대해 예제 프로그램을 통해 알아본다. 윈도우 32의 메모리는 가상 메모리로 모든 프로세스는 실제 존재하는 메모리 칩의 용량과 무관하게 2의 32제곱, 즉 4GB의 가상 메모리 공간을 가지게 된다. 이것은 시스템에서 하나의 프로세스가 생성될 때마다 각 프로세스가 4GB 크기의 가상 메모리를 가진다는 것을 의미한다. 따라서 32비트 메모리 포인터는 이론적으로 0x00000000에서 시작하여 0xF..

C, C++ 문법 2008.07.27