'SecureFunction'에 해당되는 글 1건

  1. 2007/02/13 VC6 에서 VS2005로 옮기기 2

VC6 에서 VS2005로 옮기기
2007/02/13 12:54

Vista도 그렇고 새로나온 SDK 때문에도 그렇고...
딱히 VC6에서 개발 못할 것도 없지만서도 개발환경을 VS2005로 전부 converting 하여야 겠다고 마음먹고 작업을 하려고 보니...
이것저것 쓰경쓰이는게 한두가지가 아니다.
일단 VC6 프로젝트를 VS2005에서 자동으로 변환하지 않고...
일일이 수작업으로 복사해서 붙여넣고 빌드했다...하는김에 /Wp64 옵션을 켜놓았더니 포인터에 대한 문제도 발생...
나름대로 정리하자면...

1. Secure Function
수많은 warning C4996 : deprecated 경고
일부 CRT 함수들이 보안이 강화된 함수(Secure Function)를 기존 함수를 대신하여 사용하라는 경고 문구...
간단하게 _s 만을 붙이면 될듯하지만 그게 그렇지 않다.
복사할 영역의 크기도 지정해주어야 하는데 이게 그렇게 간단하게 생각할 문제가 아니다.
보다 자세한 내용은 아래 링크 참조하자.
김명신님의 Secure Function에 관한 글 보러가기

굳이 Secure Function을 사용하고 싶지 않다면 _CRT_SECURE_NO_DEPRECATE 옵션을 사용하여 빌드하면 된다. (명령줄에 /D _CRT_SECURE_NO_DEPRECATE 를 추가하면 된다)
차후에 Secrue Function만을 지원할지 모르니 권장하지는 않는다. 그냥 VS2005로 변환후 빌드가 제대로 되는지 확인하는 차원에서만 사용하는게 좋을듯한다.

2. 형변환 문제
size_t를 DWORD로 형변환을 할때는 SizeTToDword와 같은 함수(intsafe.h, conversion 함수)를 사용하여 리턴값을 에러가 발생(64bit를 32bit로 변환함으로)하는것을 검사해서 별도의 에러처리를 수행하여야 한다.
[code]
DWORD dwRegLen;
HRESULT hrErr = SizeTToDWord((_tcslen(temp)+1)*sizeof(TCHAR),&dwRegLen);
if(hrErr==INTSAFE_E_ARITHMETIC_OVERFLOW)
{
  // 오버플로우 발생에 대한 에러 처리
}
[/code]

3. 메모리 할당
malloc와 같은 메모리 할당 함수는 char *로 메모리를 할당하기 때문에 유니코드 사용할때는 sizeof(TCHAR)의 크기를 곱해서 계산하여 한다.
그래서 문제가 되는게 _tcscpy_s 와 같은 secure function은 strDst의 크기도 지정을 해주어야 하는데 유니코드로 계산된 크기보다 char * 계산된 문자열(_tcslen)의 크기가 크기 때문에 사실은 nLen/sizeof(TCHAR)를 해주어야 한다.

(Language : c)
  1. size_t nLen = _tcslen(HubName)*sizeof(TCHAR) + sizeof(_T("test"));
  2. strDst= (LPTSTR)malloc(nLen);
  3. ...
  4. _tcscpy_s(strDst, nLen, _T("test"));
  5. _tcscpy_s(strDst+ _tcslen(_T("test")) , nLen, strSrc);




4. DWORD_PTR, UINT_PTR
timeSetEvent() 등 일부 함수에서 함수 포인터 인자를 이전 SDK에서는 DWORD 였으나 새로운 SDK에서는 DWORD_PTR로 변경.
AppendMenu()과 같은 함수는 UINT에서 UINT_PTR로 변경되었다.


바꾸어놓고 아직 테스트도 안해봤는데...
심히 노가다에 가깝구나...
 
2007/02/13 12:54 2007/02/13 12:54
Trackback Address :: 이 글에는 트랙백을 보낼 수 없습니다

  1. Subject: timesetevent-으로 이어질 블로그링

    Tracked from blogring.org 2008/12/15 22:13  삭제

    timesetevent-에 관한블로그를 요약한 것입니다.

  • 크라이키스 2007/04/03 09:44  댓글주소  수정/삭제  댓글쓰기
    그나마 ATL 프로젝트는 변환하면 컴파일도 안된다는 비극이... ^^;;