2011년 3월 8일 화요일


1. 함수의 원형

virtual int SetMapMode( int nMapMode );


2. 함수의 기능

이 함수는 맵핑모드(mapping mode)를 설정하는 함수입니다. 일반적으로 맵핑모드를 설정한다는 뜻은 우리가 프로그램에서 사용한 논리적인 출력단위를 실제 출력장치(예를들면 그래픽카드와 같은 장치)에서 어떤 단위로 출력할것인지를 설정하는 것을 의미합니다. 그리고 맵핑모드를 설정한다는것은 단순히 출력단위만 설정하는것이 아니라 X, Y 축에 대한 기준점도 설정할수 있습니다.

GDI 는 프로그램에서 사용한 논리적인 좌표(TextOut과 같은 함수에서 사용한 좌표)를 적당한 출력장치 좌표로 변환하기 위해서 맵핑모드를 사용합니다. GDI가 사용하는 기본적인 맵핑모드는 MM_TEXT 라는 모드이고, 이 모드에 사용한 1이라는 단위는 출력장치에서 한점(pixel, 화면에 찍히는 한점)을 의미합니다. 하지만 출력장치에 따라서 이 한점의 크기는 일정하지 않습니다. 또한 같은 장치라고 하더라도 해당 출력장치에 설정된 해상도(640*480, 800*600, ...)에 따라서 한점의 크기가 달라질수 있습니다.


3. 함수의 매개변수에 대한 설명

3.1 nMapMode

새롭게 설정할 맵핑모드값을 명시한다. 여기에 사용할수 있는 맵핑모드에 대한 상수 값은 아래와 같다.

3.1.1 MM_TEXT

GDI 함수에서 사용한 1의 단위가 출력장치에서 한점(1 pixel)을 의미하고 X축은 왼쪽에서
오른쪽으로 갈수록 값이 증가되고 Y축은 위쪽에서 아래쪽으로 갈수록 값이 증가된다.

3.1.2 MM_LOMETRIC

GDI 함수에서 사용한 1의 단위가 출력장치에서 0.1 mm를 의미하고 X축은 왼쪽에서 오른쪽으로 갈수록 값이 증가되고 Y축은 아래쪽에서 위쪽으로 갈수록 값이 증가된다.

3.1.3 MM_HIMETRIC

GDI 함수에서 사용한 1의 단위가 출력장치에서 0.01 mm를 의미하고 X축은 왼쪽에서 오른쪽으로 갈수록 값이 증가되고 Y축은 아래쪽에서 위쪽으로 갈수록 값이 증가된다.

3.1.4 MM_LOENGLISH

GDI 함수에서 사용한 1의 단위가 출력장치에서 0.01 인치(inch)를 의미하고 X축은 왼쪽에서
오른쪽으로 갈수록 값이 증가되고 Y축은 아래쪽에서 위쪽으로 갈수록 값이 증가된다.

3.1.5 MM_HIENGLISH

GDI 함수에서 사용한 1의 단위가 출력장치에서 0.001 인치(inch)를 의미하고 X축은 왼쪽에서
오른쪽으로 갈수록 값이 증가되고 Y축은 아래쪽에서 위쪽으로 갈수록 값이 증가된다.

3.1.6 MM_TWIPS

GDI 함수에서 사용한 1의 단위가 출력장치에서 0.0007 인치(inch)를 의미하고 X축은 왼쪽에서
오른쪽으로 갈수록 값이 증가되고 Y축은 아래쪽에서 위쪽으로 갈수록 값이 증가된다.
( 0.0007은 약식으로 표현한 값이고 실제로는 1/1440 인치(inch)가 정확한 값이다. )

3.1.7 MM_ISOTROPIC

GDI 함수에서 사용한 1의 단위가 출력장치에서 어떤 단위로 출력될것인지를 사용자가 마음데로
설정할수는 모드이고 값의 증가 방향또한 사용자가 정의할수 있다. 이 모드에서는 X축과
Y축에 대하여 배율을 동일하게 설정해야한다.

3.1.8 MM_ANISOTROPIC

GDI 함수에서 사용한 1의 단위가 출력장치에서 어떤 단위로 출력될것인지를 사용자가 마음데로
설정할수는 모드이고 값의 증가 방향또한 사용자가 정의할수 있다. 이 모드에서는 X축과
Y축에 대하여 배율을 다르게 설정할수 있다.




4. 함수의 반환값

이전에 사용하던 맵핑모드 값을 반환한다. 자신이 특정 맵핑모드로 변경하여 출력한 후에 다시 본래
사용하던 맵핑모드로 복구해야한다면 이 반환값을 저장해두었다가 작업이 끝난 후에 저장된 값을
이용하여 SetMapMode 함수를 호출하면 이전 맵핑모드로 복구할수 있다.



5. 함수 사용시 주의사항

MM_ISOTROPIC, MM_ANISOTROPIC 함수는 사용자가 논리적 단위에 장치 출력단위를 직접 정의할수 있습니다.
이 작업을 하기위해서는 SetWindowExt 또는 SetViewportExt 함수를 사용하면 됩니다. 일반적으로 배율개념이
적용되는 프로그램에서는 MM_ISOTROPIC 모드를 사용하면 좀더 쉽게 구현할수 있습니다.



6. 사용 예제

CClientDC dc(this);
// MM_LOENGLISH 모드를 사용하고 싶은 경우..
int old_mode = SetMapMode(MM_LOENGLISH); // old_mode 변수에는 이전에 사용하던 맵핑모드값이 저장된다.

출처 : http://www.tipssoft.com/bulletin/tb.php/FAQ/637

2009년 11월 5일 목요일

Log Class 설계

● 클래스:Log Class 설계

현재 상태를 사용자에게 정확하고 자세하게 알려줄 수 있는 유일한 도구이다.

 

로그라는 특성상 어느 곳에서든지 사용하기 편하도록 Singleton클래스를 상속받아 전역 단일체 클래스로 만들자

 

로그를 필요한 때에 남기지 못하고 또 정확하게 남기지 못하면 서버가 제대로 동작하고 있는지, 문제는 없는지에 대한 정보를 정확하게 파악할 수 없다.

 

체계 없이 남겨진 로그 정보는 실제 필요한 로그를 찾는데 시간이 오래 걸 릴 뿐만 아니라 그게 대한 정보가 부족해 결국 시스템 부하만 줄 뿐 기능상으로는 유명무실해 진다.

 

1. Log 클래스의 종류를 나누자

- 알림오류로 나눠 자신이 원하는 정보를 보다 빨리 찾을 수 있도록 설계 하고

2. Log 클래스의 중요도를 나누자

- 각 종류마다 중요도 LOW, NORMAL, HIGH, CRITICAL등 등급을 나누어 쉽게 정보의 중요성을 파악할 수 있게 하자

2-1. 아래 나와 있는 enumLogInfoType은 Log클래스에서 사용할 로그 정보의 분류를 나열한 것이다

enum enumLogInfoType

{

    LOG_NONE= 0x00000000,

    LOG_INFO_LOW= 0x00000001,

    LOG_INFO_NORMAL= 0x00000002,

    LOG_INFO_HIGH= 0x00000004,

    LOG_INFO_CRITICAL= 0x00000008,

    LOG_INFO_ALL= 0x0000000F,

    LOG_ERROR_LOW= 0x00000010,

    LOG_ERROR_NORMAL= 0x00000020,

    LOG_ERROR_HIGH= 0x00000040,

    LOG_ERROR_CRITICAL= 0x00000080,

    LOG_ERROR_ALL= 0x00000100,

    LOG_ALL= 0x000001FF

};

각 등급마다 16진수로 설정하고 OR 연산을 할 수 있도록 2의n승으로 증가시킨다.

- 로그를 저장할 매체 : 파일, 출력 창, 윈도우, DB, TCP, UDP로 분류

enum enumLogStorageType

{

    STORAGE_F ILE= 0x00000000,

    STORAGE_DB= 0x00000001,

    STORAGE_WINDOW= 0x00000002,

    STORAGE_OUTPUTWND= 0x00000003,

    STORAGE_UDP= 0x00000004,

    STORAGE_TCP= 0x00000005

};

위의 enumLogStorageType은 로그를 저장할 매체에 대한 선언이다.

 

로그의 부하로 인해 속도에 문제가 생길 수 있기 때문에 최소한의 처리(로그를 내부 Queue에 넣고 바로 반환)만 하고 내부적으로 틱 쓰레드를 사용하여 일정 시간마다 Queue에 들어있던 로그를 가져와 처리하도록 한다.

서비스 할 때에는 로그를 최소한으로 하여 사용해야 한다.

 

 

3.로그를 남기는 시점

3-1. 에러 로그의 경우 모든 경우에 로그로 남긴다.

- 쉽게 넘긴 작은 에러 하나가 정말 큰 버그를 부른다.

3-2. 일반적인 정보 로그의 경우

- 함수 시작 부분과 모든 패킷 처리 시작 부분에 남기는 것이 좋다.

- 이유는 만약 어떤 처리를 하다 이유 없이 서버 프로세스가 죽었을 경우에 쉽게 그 위치를 파악할 수 있다.

- 모든 함수와 패킷에서 로그를 남긴다면 실제 서비스할 때에는 엄청난 부하가 생길 것이다. 그래서 앞에서 정한 등급에 따라 일정 등급 이하의 정보를 로그로 남기지 않거나 정보 관련 로그는 아예 남기지 않도록 할 수 있다.

 

4.무엇을 로그로 남길 것인가

4-1. 로그가 어떤 함수에서 남겨졌는지 알아야 한다.

4-2. 누구에 의해서 로그가 남겨졌는지를 알아야 한다.

- 시스템일수도 있고 패킷을 받아 남기는 것이라면 패킷을 보낸 해당 클라이언트가 될 수도 있다.

4-3. 로그가 발생되는 시간을 남겨야한다.

4-4. 로그의 종류가 에러라고 하면 에러가 어떤 작업을 하다가 발생한 것인지 남겨야하고 종류가 알림이라면 함수의 인자나 받은 패킷의 프로토콜 내용을 남겨야 한다.

2009년 11월 2일 월요일

ioctlsocket

ioctlsocket

ioctlsocket 함수는 소켓의 입출력 모드를 제어하는 함수입니다.

int ioctlsocket (
        SOCKET  
s,
        long  
cmd,
        u_long FAR*  
argp
);

 

Parameters

s
[입력] 작업대상 소켓의 기술자(descriptor)를 명시합니다.

cmd
[입력] 소켓 s가 수행할 컴맨드(command)

argp
[입/출력] command에 대한 입/출력 파라메터로 사용됩니다.

Remarks

ioctlsocket 함수는 특정한 상태로 지정한 소켓을 제어하는데 사용됩니다. 이 함수는 소켓과 연관된 매개변수를 반환하거나, 설정 할 수 있습니다. 아래에 cmd 매개변수와 사용방법에 대해서 지원되는 컴맨드를 나열해 보았습니다. 참고하세요.

    FIONBIO

    argp 매개변수가 0이 아닐 경우 소켓 s의 넌블럭킹(비동기) 모드를 활성화 합니다. argp 매개변수가 0일 경우는 넌블럭킹(비동기) 모드는 비활성화 됩니다. argp 매개변수는 unsigned long 값을 포인트 합니다. 소켓이 생성되었을 때는 기본적으로 블록킹(동기) 모드로 동작한다는 사실을 참고로 알아둡시다.

    WSAAsyncSelect 그리고 WSAEventSelect 함수는 소켓을 넌블럭킹(비동기) 모드로 설정합니다. 만약 WSAAsyncSelect 함수나 WSAEventSelect 함수가 소켓에 대해서 설정 되었다면, ioctlsocket 함수를 호출하여 블록킹(동기) 모드로 소켓을 설정하려고 하는 시도는 WSAEINVAL 에러코드를 동반(?)한 실패로 돌아갈 것입니다. 소켓을 블록킹 모드로 설정하기 위해서 어플리케이션은 IEvent 매개변수를 0으로 해서 WSAAsyncSelect 함수를 호출하거나 INetworkEvents 매개변수를 0으로 하여 WSAEventSelect 함수를 호출해야만 합니다.

    FIONREAD

    네트웍 입력 버퍼에서 기다리고 있는, 소켓 s로부터 읽을 수 있는 데이터의 크기(amount)를 얻어내는데 사용됩니다. argp 매개변수는 데이터의 크기를 의미하는 unsigned long 형태로 포인트 합니다. 다시 말하자면, 만약 s 매개변수가 연결지향형(stream oriented) 소켓(예:SOCK_STREAM) 일 경우 FIONREAD 컴맨드에 의한 ioctlsocket 함수의 호출은 recv 함수의 호출로 읽을 수 있는 데이터의 크기(amount)를 반환하게 되는거죠. 만약 소켓이 메시지 지향형(message oriented) 소켓(예:SOCK_DGRAM) 일 경우 FIONREAD 컴맨드는 소켓에 큐된 첫 번째 데이터그램의 크기를 반환 합니다.

    SIOCATMARK

    소켓으로부터 out-of-band 데이터가 모두 읽혀졌는지를 판단하기 위해 사용됩니다. argp 파라메터는 반환값이 저장된 boolean 로 포인트 합니다. 읽혀지기를 원하는 out-of-band 데이터가 없을 경우 TRUE가 반환되고, 그렇지 않은 경우 FALSE가 반환 됩니다. 이 명령은 setsockopt 함수로 SO_OOBINLINE 옵션을 설정한 SOCK_STREAM 타입의 스트림 소켓에만 적용될 수 있습니다.

Compatibility

ioctlsocket 함수는 버클리 소켓의 ioctl 함수와 비교해 볼 때 극히 일부분에 대해서만 동작 합니다. ioctlsocket 함수는 ioctl 함수의 FIOASYNC와 같은 컴맨트 매개변수를 지원하지 않습니다. 그리고, SIOCATMARK 컴맨드는 ioctrlsocket 함수에서만 제공되는 컴맨드 입니다.

Return Values

성공적으로 함수가 수행하면, ioctlsocket 함수는 0을 반환 합니다. 에러가 발생한 경우는 SOCK_ERROR을 반환하고, WSAGetLastError 함수를 이용해서 특정한 에러코드를 얻을 수 있습니다.

Error Codes

WSANOTINITIALISED

이 함수를 사용하기 전에 성공적인 WSAStartup 함수의 호출이 없었습니다.

WSAENETDOWN 네트웍 서브 시스템에 에러가 발생했습니다.
WSAEINPROGRESS

블럭킹 윈속 v1.1 이 현재 진행 중이거나, 서비스 프로바이더가 콜백 함수를

여전히 처리하고 있습니다.

WSAENOTSOCK

기술자(descriptor)가 소켓 기술자가 아닙니다.

WSAEFAULT argp 매개변수가 올바를 형태가 아닙니다.

QuickInfo

Windows NT : 사용가능
Windows : 사용가능
Windows CE : 버젼 1.0 그리고 그이후의 버젼에서 사용가능
Header :
          Win16/32 : winsock.h
          Win32-II : winsock2.h
Import Library :
          Win16 : winsock.lib
          Win32 : wsock32.lib
          Win32-II : ws2_32.lib

See Also

2009년 10월 30일 금요일

FVF란.. (Flexible Vertex Format)

FVF는 D3D에서 정해져 있는 정점의 포맷 중에서 자신이 제작하는 프로그램에 알맞은 것들을 모아서 새로운 정점 포맷을 정하는 방법이다.

 

FVF 플래그 값의 용도

명칭

용도

정점의 좌표

정점의 3차원 좌표를 나타낸다.

RHW

동차 좌표계의 w값. 이 값이 있으면 변환이 완료된 정점이다.

결합 가중치

스키닝에 사용된다.

법선 벡터

정점의 법선 벡터를 나타낸다. 주로 광원 처리 시 사용된다.

확산광

RGBA(r, g, b, a)매크로 값이며, 정점의 확산광 색깔을 나타낸다.

반사광

RGBA(r, g, b, a)매크로 값이며, 정점의 반사광 색깔을 나타낸다.

텍스처 좌표

텍스처 좌표값을 나타낸다. D3D는 8개까지 텍스처를 동시에 겹쳐서 사용할수 있다. 예를 들어, 법선 맵핑을 하려면 첫 번째 값을 확산 맵 정보로, 두 번째 값을 법선 맵 정보로 설정하여 사용할 수 있다.

나만의 노트

Scatter-Gatter I/O

: 우리말로 풀어 보자면 분배-집합 입출력이다. WSASend()함수를 이용하여 여러 개의 버퍼를 하나의 패킷으로 묶어 보내고 받는 쪽에서는 WSARecv()함수를 이용하여 하나의 패킷으로 받아서 다시 여러 개의 버퍼로 나눌 수 있다. 그러나 이것은 일반적으로 고정되고 형식화된 데이터를 송수신 하는 프로그램에서는 유용하나 게임 서버에서는 이 방식이 거의 쓰이지 않는다.

 

[함수 호출 규약(Function Calling Convention)]

: CALLBACK이란 것은 사용자가 호출하는 것이 아니고 윈도우에서 호출해주는 함수를 의미하는 것으로 선언 해놓은 것을 보면 #define CALLBACK _stdcall 라고 되어 있다. 이렇게 #define한 이유는 코드의 가독성을 위해서 그렇다. CALLBACK이란 키워드를 보면 "아 이것은 윈도우가 호출하는 함수구나"라는 것을 코드만 보아도 알 수 있도록 한 것이다. 이 외에도 우리에게 익숙한 WINAPI, APIENTRY도 이와 동일하게 선언 되어있다.

그러면 _stdcall은 무었일까? 함수를 호풀 하는 방식은 함수를 호출할 때 인자를 넘겨주는 방식과 함수를 다 사용한 후에 스탯에 담겨 있던 인자를 제거하는 방식에 따라서 크게 4가지로 나눌수 있다.

그 4가지는 _stdcall, _cdecl, _fastcall, _thiscall이 있다. 자 그럼 한가지씩 파해쳐 보자~

_stdcall

: _stdcall 윈도우상에서 기본적으로 사용되는 방식이다. _stdcall의 특징은 함수가 호출되어 인자를 전달할 때 스택을 이용해서 전달하는데 스택에 인자의 오른쪽을 시작으로 해서 왼쪽까지 스택에 순서대로 넣고 함수 처리가 모두 끝난 후에 스택에 있던 인자들을 호출 당한 함수에서 모두 해제를 하고 반환한다.

<_stdcall의 처리 순서>

오른쪽부터 스택에 인자를 넣는다 -> 함수 호출 -> 함수 처리가 끝난 후 스택의 인자를 해제 한다(스택 복원) -> 함수 반환

_cdecl

: 이것은 C와 C++에서 기본적으로 사용되는 방식으로써 _stdcall과 마찬가지로 호출할 때 스택에 인자를 오른쪽부터 순서대로 넣는다. 하지만 이 방식은 스택의 인자를 호출된 함수에서 처리하지 않고 호출된 함수가 반환된 후에 호출을 한 함수에서 그 스택에 있던 인자를 해제한다.

<_cdecl의 처리 순서>

오른쪽부터 스택에 인자를 넣는다 -> 함수 호출 -> 함수 반환 -> 호출한 함수로 돌아온 후 스택의 인자를 해제 한다(스택 복원)

_fastcall

: 이것은 볼랜드 델파이나 C 빌더에서 기본적으로 사용되는 방식으로써 두개의 인자를 레지스터 ecx와 edx를 이용해 전달하는 방식이다. 인자가 두개를 넘을 경우에는 두개만 레지스터에 넣어 전달하고 나머지는 다른 호출과 마찬가지로 스택에 넣어 전달하고 레지스터가 이미 사용 중이라면 모두 스택에 넣어 전달된다. 인자를 넣는 순서는 오른쪽부터 왼쪽이며 슽택 해제 방식은 _stdcall과 마찬가지로 반환되기 전 호출된 함수 내에서 해제를 한다.

<_fastcall의 처리 순서>

오른쪽부터 스택에 인자를 넣는데 2개의 인자에 대해서는 레지스터가 비어있다면 레지스터로 넣는다. -> 함수 호출 -> 함수 처리가 끝난 후 스택의 인자를 해제한다(스택 복원) -> 함수 반환

 

_thiscall

: 이것은 C++의 클래스에서 함수를 호출할 때 기본적으로 사용되는 방법이다. 이 방식은 인자 전달 방식이나 해제 방식은 _stdcall과 같다. 하지만 this라는 인자를 ecx 레지스터에 전달하는데 이유는 클래스라는 개념 때문에 그렇다. 클래스는 같은 형태로 여러 개의 객체를 만들수 있는데 이 각각의 객체들은 멤버 변수와 멤버 함수를 가지며 이 객체들의 멤버 변수는 메모리 상에서도 서로 다른 위치에서 독립적으로 있다. 하지만 멤버 함수는 메모리상에 같은 위치에 있어서 모든 객체들은 같은 멤버 함수를 사용한다. 그렇지만 멤버 함수에서는 각각의 객체에 해당하는 멤버 변수를 특별한 선언 없이도 접근이 가능 해야 하는데 그것을 하기 위해 this라는 객체의 포인터가 필요한 것이다.

<_thiscall의 처리 순서>

오른쪽부터 스택에 인자를 넣고this포인터를 ecx레지스터에 넣는다. -> 함수 호출 -> 함수 처리가 끝난 후 스택의 인자를 해제한다(스택 복원) -> 함수 반환

벤치마킹의 정의

벤치마킹이란..

 

어느 특정분야에서 우수한 상대를 표적 삼아 자기 기업과의 성과 차이를 비교하고 이를 극복하기 위해 그들의 뛰어난 운영 프로세스 등을 배우면서 부단히 자기혁신을 추구하는 기법이다.

 

즉 뛰어난 상대에게서 배울 것을 찾아 배우는 것이다. 벤치마킹은 기본적으로 측정 프로세스이나 이러한 측정 프로세스는 결과적으로 상대방의 성과를 비교하는데만 그치는 것이 아니라 상대방의 우수한 성과가 어떻게 도출되었는가 하는 방법론적인 노하우까지도 비교대상으로 삼는다. 즉 벤치마킹 활동의 결과물로는 상대적인 성과의 비교 뿐만이 아니라 우수한 성과를 가져오게 된 동인(enabler)도 분석하여 제시되어야 한다.

 

벤치마킹 기법을 활용한 경영혁신의 추진은 일반적으로 적용분야의 선정, 상대의 결정, 정보수집, 성과 차이의 확인 및 분석, 결과의 전파 및 사내 공감대형성, 혁신계획의 수립, 실행 및 평가의 순으로 진행되며 성공적인 활용을 위해서는 적용분야, 상대, 성과측정지표, 운영 프로세스라는 벤치마킹의 4가지 구성요소에 대한 명확한 이해가 필요하다.

2009년 10월 26일 월요일

서버 프로그래밍 기초

윈도우즈형과 ANSI 표준형의 비교 및 설명

윈도우즈(windows)

ANSI

설명

BOOL

bool

TRUE/FALSE 변수

BYTE

signed char

8비트 변수

DWORD

unsigned long

32비트 정수형 변수

DWORD_PTR

unsigned long

32비트 정수형 포인터 변수

FLOAT

float

32비트 실수형 변수

INT

int

32비트 정수형 변수

INT32

int

32비트 정수형 변수

INT64

_int64

64비트 정수형 변수

CHAR

char

8비트 변수

LPCSTR

const char*

8비트 문자열 변수

LPCTSTR

char* 또는 wchar*

MultiByte,Unicode에 따라 달라짐

VOID

void

 

- LPCTSTR은 CONST TCHAR*를 의미 합니다.

 

32bit 환경에서의 데이터형에 따른 바이트 크기

데이터형

크기

설명

INT

4 바이트

 

INT32

4 바이트

 

INT64

8 바이트

64bit INT형으로 8바이트 크기

FLOAT

4 바이트

 

DOUBLE

8 바이트

 

BYTE

1 바이트

 

CHAR

1 바이트

 

WCHAR

2 바이트

Unicode를 표현하기 위한 데이터형

DWORD

4 바이트

 

USHOT

2 바이트

16bit 만큼의 숫자를 표현할 수 있음

SHORT

2 바이트

 

 

윈도우즈 함수와 ANSI 함수의 비교 및 설명 (대표적 함수)

윈도우즈(Windows)

ANSI

설명

FillMemory

memset

정해진 크기의 메모리에 데이터를 채울 때 사용

ZeroMemory

memset

정해진 크기의 메모리를 0으로 초기화할 때 사용

CopyMemory

memcpy

정해진 크기의 메모리를 복사할 때 사용

MoveMemory

memmove

정해진 크기의 메모리를 이동할 때 사용

[함수 원형]

VOID FillMemory(PVOID Destination, SIZE_T Length, BYTE Fill)

PVOID Destination

SIZE_T Length

BYTE Fill

값을 채울 메모리입니다.

값을 채울 크기입니다.

채울 1바이트 값입니다.

VOID ZeroMemory(PVOID Destination, SIZE_T Length)

PVOID Destination

SIZE_T Length

초기화할 메모리입니다.

초기화할 크기입니다.

VOID CopyMemory(PVOID Destination, CONST VOID* Source, SIZE_T Length)

PVOID Destination

CONST VOID* Source

SIZE_T Length

복사를 해 넣을 메모리입니다.

복사할 원본 메모리입니다.

복사할 크기입니다.

VOID MoveMemory(PVOID Destination, CONST VOID* Source, SIZE_T Length)

PVOID Destination

CONST VOID* Source

SIZE_T Length

옮겨 넣을 메모리입니다.

옮길 원본 메모리입니다.

옮길 크기입니다.

 

TCHAR 사용에 따른 문자열 함수

TCHAR

CHAR

설명

_tcscpy

strcpy

문자열을 복사할 때 사용

_tcsncpy

strncpy

문자열을 정해진 길이만큼 복사한다

_tcscmp

strcmp

문자열을 비교 한다

_tprintf

printf

화면에 문자열을 출력 한다

_stprintf

sprintf

정해진 버퍼에 정해진 형식의 문자열을 입력

_sntprintf

snprintf

정해진 버퍼에 정해진 길이만큼 정해진 형식의 문자열을 입력

[함수 원형]

TCHAR* _tcscpy(TCHAR *strDestination, CONST TCHAR *strSource)

RETURN

TCHAR *strDestination

CONST TCHAR *strSource

strDestination의 포인터

문자열을 복사해 넣을 메모리

원본 문자열

TCHAR* _tcsncpy(TCHAR *strDestination, CONST TCHAR *strSource, SIZE_T count)

RETURNT

CHAR *strDestination CONST TCHAR *strSource SIZE_T count

strDestination의 포인터

문자열을 복사해 넣을 메모리

원본 문자열

복사해 넣을 문자열의 길이

INT _tcscmp(CONST TCHAR *string1, CONST TCHAR *string2)

RETURNT

CONST TCHAR *string1 CONST TCHAR *string2

0일 경우 같고 0이 아닐 경우 같지 않은 문자열

비교할 문자열 1

비교할 문자열 2

INT _tprintf(CONST TCHAR *format, [argument])

RETURNT

CONST TCHAR *format

출력된 문자열의 개수

포맷 문자열

INT _stprintf(TCHAR *buffer, CONST TCHAR *format, [argument])

RETURNT

TCHAR *buffer

CONST TCHAR *format

출력된 문자열의 개수

문자열을 입력할 메모리

포맷 문자열

INT _sntprintf(TCHAR *buffer, SIZE_T count, CONST TCHAR *format, [argument])

RETURNT

TCHAR *buffer

SIZE_T count

CONST TCHAR *format

출력된 문자열의 개수

문자열을 입력할 메모리

입력할 문자열의 개수

포맷 문자열