Loading...

dllimport, dllexport

dllimport, dllexport DLL에서(로) 함수, 데이터, 개체를 내보내는(가져오는) 속성. 함수를 dllexport로 선언하면, 적어도 export된 함수 스펙과 관련된 .DEF (모듈 정의) 파일이 필요없다. 또한 dllexport는 __export 키워드 (16비트 버전의 VC++에서 사용) 를 대체한다. declspec(dllexport) 클래스의 클래스 템플릿 특수화(specialization)는 암묵적으로 declspec(dllexport)가 된다. 즉 템플릿은 명시적으로 인스턴스화(==구체화)되고, 그 멤버들은 반드시 정의되어야 한다. dllexport C++ 함수는 이름장식을 가진 함수를 노출시킨다. C++ 이름장식이 필요없다면, .def 파일 (EXPORTS(MSDN) 키워드)..

stl을 DLL제작시 문제점..warning C4251: 에 대한 대처

원문링크 : http://blog.naver.com/wwforever80/60043796212 #include #if !defined(DLLEXPORT_EXPORTS) # define DLLEXPORT_API __declspec(dllexport) #else # define DLLEXPORT_API __declspec(dllimport) #endif class DLLEXPORT_API CDLLexport { public: std::vector vs; }; warning C4251: 'vs' : class 'std::vector' needs to have dll-interface to be used by clients of class 'CDLLexport..

2010. 11. 7. 12:01

RTTI

rtti에 대해 잘 나온글.링크는 비공개로 되어 있지만 이글만으로 충분한 설명이 되어 있는듯 하다.링크 : http://www.anycoding.com/bbs/board.php?bo_table=acProgram_Cpp&wr_id=3816 이 글은 Furyheimdall 에 의해 furyheimdall.springnote.com 에서 작성되었습니다.퍼가실 때는 furyheimdall.springnote.com 혹은 furyheimdall.tistory.com 을 표기해주세요.RTTI 란?Run Time Type Information  or  Run Time Type Identification의 약자로 실행시간에 타입정보를 식별 정도로 풀이할 수 있습니다.정확한 의미는, 실행중에 기반 클래스 타입 포인터의 ..

safe memcpy

사용법 uiSize = sizeof( D3DXVECTOR2 ); SafeMemcpy(dstbuffer, srcbuffer, uiSize, start(여기선 dstbuffer), 마지막위치(여기선 dstbuffer + (uSize+1))); 이런식으로 사용하면 된다. 그냥 간단히 src와 dst, 그리고 복사할만큼의 크기로 memcpy할때 안전한지 체크한다. 그다지 쓸일이 많지 않기도 하지만 중요한 부분을 처리할때는 이렇게 사용해도 괜춘은듯. 그냥 api보고 베껴서 만들었다.흐헤헤. BOOL SafeMemcpy(void *dst, void *src, size_t n, void *start, void *end) { if(n < 1) { #ifdef _DEBUG MGASSERT(!"Font memcpy fai..

2010. 10. 31. 00:48

CreateEvent

대기상태에 있는 스레드 모두를 실행가능한 상태로 변경해 줄 수 있다. HANDLE CreateEvent( LPSECURITY_ATTRIBUTES lpEventAttributes, BOOL bManualReset, BOOL bInitialState, LPTSTR lpName ); lpEventAttributes : NULL 넣어주면 된다. bManualReset : manual-reset 모드 event로 생성할 것인지 auto-reset 모드 event로 생성할 것인지 지정. 만약 TRUE를 전달하면 manual-reset모드의 event가 발생하는데 event가 signaled 상태에 있을 경우 resetevent함수를 호출하지 않는 이상 non-signaled상태로 돌아가지 않는다. 반면에 FALSE..

2010. 10. 30. 23:11

_beginthreadex

스레드를 생성하는 함수. 스레드는 커널에 의해 생성되는 리소스이므로 커널 오브젝트가 생성될 것이고 함수 호출이 끝나면 커널 오브젝트를 의미하는 핸들이 리턴 될 것이다. 1. Win32 API의 CreateThread 대신 C Run Time Library의 _beginthreadex를 써야하는 경우 1.부동 소수형 변수나 함수를 사용할 경우 2.C의 malloc과 free나 C++ 의 new와 delete 를 사용할경우 3.stdio.h 나 io.h에서 어떤 함수를 호출한다면 4.strtok() 나 rand() 와 같이 정적 버퍼를 사용 하는 어떤 런타임 함수를 호출할 경우 출처 : http://www.fiadot.com/TatterTools/index.php?pl=476&setdate=200402&PH..

2010. 10. 30. 22:03

WaitForSingleObject

DWORD WaitForSingleObject( HANDLE hHandle, // handle to object DWORD dwMilliseconds // time-out interval ); 실패시 WAIT_FAILED 리턴 HhANDLE : 상태를 확인할 커널 오브젝트의 핸들을 전달. 이 핸들의 커널 오브젝트 상태가 signaled가 되어야 리턴한다. non-signaled상태에 있을 경우 함수는 리턴하지 않고 대기상태로 들어간다. dwMilliseconds : 타임아웃을 설정한다. 커널오브젝트가 singnaled 상태로 바뀌지 않을 경우 무한대기 상태로 빠질수 있다. 그러나 타임아웃을 설정해 놓으면 그 시간이 지나서 바로 리턴하게 된다. 1/1000초 단위로 설정한다. 만약 INFINITE를 전달할..

pointer to member function의 크기?

본문 : http://www.gpgstudy.com/forum/viewtopic.php?topic=5749 VC 컴파일러 혹은 링커의 버그를 발견한 듯 싶습니다. 올려짐: 2005-04-24 09:38 자세한 내용은 http://wminos.jaram...p/Project_PacMan#s-5 위키에 정리해놨습니다. ----------------------- 팩맨 게임 코어에 GUI시스템을 작성하던 중 실행타임 버그를 발견하게 되었습니다. 디버깅을 아무리 해도, 납득할 수 없는 현상이었는데. 소스에는 아무런 문제가 없어 보입니다. dev-c++ 로는 에러없이 컴파일 되는군요. vc7 과 vc8 beta 에서는 에러가 발생합니다. 몇시간을 디버깅 한 결과, 발생 원인을 알게 되었고.. 스샷과 그 현상이 일어..