출처: http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=51&MAEULNO=20&no=8196&page=1
출처: http://a.tk.co.kr/entry/timet-%EC%99%80-InterlockedExchange-%EC%82%AC%EC%9A%A9%EA%B8%88%EC%A7%80-Visual-Studio-2005-%EB%B3%80%EA%B2%BD

VC6의 time_t가 long형으로 디파인 되어있는데요. VC8에선 요놈이 __int64이더라구요.

c:\Program Files\Microsoft Visual Studio\VC98\Include\TIME.H

#ifndef _TIME_T_DEFINED
typedef long time_t;        /* time value */
#define _TIME_T_DEFINED     /* avoid multiple def's of time_t */
#endif

////////////////////////////////////////////////////////////////////////////

c:\program files\microsoft visual studio 8\vc\include\crtdefs.h
#ifndef _TIME64_T_DEFINED
#if     _INTEGRAL_MAX_BITS >= 64
typedef __int64 __time64_t;     /* 64-bit time value */
#endif
#define _TIME64_T_DEFINED
#endif

DLL과 연결된 콜백함수였는데.. time_t인자 이후로는 값이 이상하게 전달되서 오늘 하루 완전 별짓을 다했네요 ㅎㅎ 에러도 안나구요. 아무 문제없이 컴파일 됩니다. 다만 늘어난 자료형에 따라 그뒤에 변수들 값이 4바이트메모리 만큼 밀린곳의 값을 가져오더라구요 ㅡ.ㅡ;;;;;;;; 맨마지막 변수는 쓰레기값;;

————————

InterlockedExchange는 스레드(Thread)에 안전하게 32bit( INT, LONG, DWORD )형 변수를 교환하는 함수입니다.
Visual C++ 6.0 에서는 time_t 자료 형이 4 바이트이지만 Visual Studio 2005에서는 8바이트로 변경되었습니다.
따라서 InterlockedExchange에서는 time_t 자료 형의 변수를 사용하면 안됩니다.

Related Posts

답글 남기기

이메일 주소는 공개되지 않습니다.