정리

[Tool] VS2005 단축키 및 매크로

저장소/VC++
 

불타는 펌질. 내용 ㄳㄳ
원문 : Visual Studio 2005 단축키




VC 단축키 및 주석 매크로

 

Ctrl + Tab Edit하고 있는 Child Window 간의 이동


Ctrl + F4 현재 Edit하고 있는 Child Window를 닫기


Ctrl + I 문자열 입력 점진적으로 문자열 찾기 (Incremental Search)


Ctrl + F3 현재 커서에 있는 문자열 찾기 fowared (블록 지정 안 해도 됨)


Shift + F3 현재 커서에 있는 문자열 찾기 backward


F3 찾은 문자열에 대한 다음 문자열로 이동 (Next Search)


Ctrl + H 문자열 찾아 바꾸기 (Replace)


Ctrl + Left/Right Arrow 단어 단위로 이동


Ctrl + Delete 또는 Backspace 단어 단위로 삭제


Ctrl + F2 현재 라인에 북마크 지정/해제


F2 지정된 다음 북마크로 이동


Ctrl + Shift + F2 지정된 모든 북마크를 해제


F9 현재 라인에 Breakpoint를 지정/해제


Ctrl + Shift + F9 현재 Edit하고 있는 소스파일에 지정된 모든 Breakpoint 해제


Ctrl + ] 또는 E '{'괄호의 짝을 찾아줌 ('{'에 커서를 놓고 눌러야 함}


Ctrl + J, K #ifdef 와 #endif의 짝을 찾아줌


Ctrl + L 한 라인을 클립보드로 잘라내기 (Cut)


Ctrl + Shift + L 한 라인을 삭제


Alt + Mouse 블록 설정 세로로 블록 설정하기 (마우스d로)


Ctrl + Shift + F8 세로로 블록 설정하기 (키보드로), 취소할 때는 Esc키를 눌러야 함


블록 설정 -> Tab 선택된 블록의 문자열을 일괄적으로 들여쓰기(Tab) 적용


블록 설정 -> Shift + Tab 선택된 블록의 문자열을 일괄적으로 내어쓰기 적용


Alt + F8 -> Tab 또는 Shift + Tab 들여쓰기 자동 조정 (Tab:들여쓰기, Shift + Tab : 내어쓰기)


Ctrl + T 현재 커서에 있는 변수/함수에 대한 Type이 Tooltip 힌트 창에 나타남


Ctrl + Alt + T 멤버 변수/함수 목록에 대한 팝업 창이 나타남


Ctrl + Shift + T 공백/콤마/파이프/괄호 등을 기준으로 좌우 문자열을 Swap시킴


Ctrl + Shift + 8 문단기호 표시/감추기 : Tab은 ^, Space는 .으로 표시


Ctrl + D 툴바의 찾기 Editbox로 이동


Ctrl + Up/Down Arrow 커서는 고정시키고 화면만 스크롤 시키기


Tab 들여쓰기


Shift+Tab 내어쓰기


F4 다음 에러메세지로 이동


Alt+F8 들여쓰기 자동 조정


Ctrl+F 찾기


Ctrl+F3 현재 커서에 있는 단어로 찾기


Ctrl+H 찾아 바꾸기


F3 다음 단어 찾기


Ctrl+Shift+F3 이전 단어 찾기


Alt+E+I 프로젝트 내의 모든 파일에서 찾기


F2 설정된 북마크로 이동


F9 현재 커서위치에 BreakPoint를 설정/해제


Ctrl+B 브레이크 포인트 관리 메뉴


Ctrl+Spacebar 멤버목록 팝업창


Ctrl+T 현재 커서에 있는 단어의 툴팁정보 보기


Ctrl+U 모두 소문자로


Ctrl+Shift+U 모두 대문자로


Ctrl+Shift+8 Tab은 ^ 로 공백은 . 으로 보여줌


 


디버깅에 관련된 단축키 하나 더.


변수이름을 적어 놓고 브래이크 포인터의 위치 여부와 관계 없이 변수의 내용을 추적하는 기능이 Watch Window에 들어 있다. 디버그 모드에서 추가하고픈 변수나 등등 앞에 커서를 위치 시킨후 Shift + F9를 누르면 그냥 바로 추가된다.


 


▼ Browse Information file 이 필요한 단축키


(컴파일 되어야 함)


 


F12 현재 커서의 함수 정의 부분으로 이동


Shift+F12 현재 커서의 함수 참조 부분으로 이동


Ctrl+Num+ 다음 정의/참조 로 이동


Ctrl+Num- 이전 정의/참조 로 이동


 


▼ Visual Assist 6.0 설치시 가능한 단축키


 


Alt+O 현재 파일의 헤더(.h)/구현(.cpp) 파일로 이동


Alt+G 현재 커서의 함수 정의 부분으로 이동


Alt+M 현재 파일의 모든 함수 목록


Ctrl+Shift+V 선택해서 붙여넣기


Alt+← 이전 커서 위치로 이동


Alt+→ 다음 커서 위치로 이동



■ 디버그 단축키


 


변수이름을 적어 놓고 브래이크 포인터의 위치 여부와 관계 없이 변수의 내용을


추적하는 기능이 Watch Window에 들어 있죠...


그 때 디버그 모드에서 추가하고픈 변수나 등등 앞에 커서를 위치 시킨후


Shift + F9를 누르면 그냥 바로 추가됩니다


[Tool] VS2005 환경설정 및 단축키 설정

저장소/VC++

퍼왔음. 내용 ㄳㄳ
원문 : Kyuseo’s Visual Studio 2005 단축키 및 옵션 설정(세팅)



개요 

 

Kyuseo가 즐겨 사용하는 Visual Studio 6.0 과 유사하도록 설정한 Visual Studio 2005 단축키 및 옵션 설정(세팅) 입니다. 2005 는 6.0과 달리 복잡한 세부적인 설정까지 할 수 있어서 좋더군요.

 

2005에서 프로그래밍 하시는 분들은 참고하세요.

 

 

Kyuseo's Visual Studio 2005 설정

 

- 옵션 설정 (세부설명 : F1 을 눌러서 msdn 도움말을 참고)

 

 

 

- 단축키 설정

 

빌드.선택영역빌드         : F7

빌드.선택영역다시빌드    : Shift+F7

파일.모두저장            : Alt S

편집.클립보드링순환    : Ctrl+Shift +V

창.자동숨기기            : Ctrl+`

 

보기.솔루션탐색기    : Ctrl+1

보기.클래스뷰        : Ctrl+2

보기.리소스뷰        : Ctrl+3

 

Visual Assist

헤더 소스 전환     : Alt O

함수 목록        : Alt M

 

프로젝트 익스플러러 : Ctrl+E

 

알아둘 기본 단축키

파일에서 찾기            : Ctrl Shift S

파일에서 바꾸기        : Ctrl Shift H

'저장소 > VC++' 카테고리의 다른 글

[Error/Warning] fatal error C1902  (0) 2009.09.22
[Tool] VS2005 단축키 및 매크로  (0) 2009.09.22
[Win32] System Performance Monitoring(2)  (0) 2009.09.14
[Win32] 시스템 메모리 정보 확인  (0) 2009.09.14
[Win32] PDH Error Codes  (0) 2009.09.11

[Win32] System Performance Monitoring(2)

저장소/VC++
성능 모니터(perfmon)

Idle Time 확인으로부터 여기까지 왔다.
처음부터 알았으면 무지 좋았을텐데... ㅡㅜ
아무튼 설명 시작!

성능 모니터(이하 perfmon)를 살펴보자. 보는 방법은 2가지!

1. '시작' - '실행' - perfmon.msc 를 실행시킨다.
2. '제어판' - '관리 도구' - '성능' 을 실행시킨다.

실행시키면 다음과 같은 윈도우가 열린다.


음... 상큼하다. 이런게 있었다니.
전에 보긴 봤는데 별로 관심을 안갖다보니... 쿨럭.. -_-;
아무튼 필요한 것들을 보자.


뭐... 대략 이런 것들을 확인할 수 있다.
여기서 중요한게 '성능 개체의 카운터'라고 할 수 있겠다.
상당히 많은 종류의 개체와 카운터들이 존재한다.

설명을 누르면 설명 부분이 추가로 보이며 매우 친절하게 설명까지 해준다.
너무 멋지다~ +_+


※추가 정보
'Process' 개체를 보면 '인스턴스'에 프로세스 이름만 있을 뿐 PID를 확인할 수 없다.


근데 MS에서 PID를 확인할 수 있게 만들어놨다. (http://support.microsoft.com/kb/281884)
방법은 바로 레지스트리를 수정하는 것!!!
다음 위치에 DWORD 값을 하나 추가하도록 하자.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PerfProc\Performance
Type : DWORD
Name : ProcessNameFormat
Value : 2

시스템 재시작 따위는 필요 없다! perfmon을 다시 확인해보자.


오우! 잘 보인다앙~

뭐... 이게 끝!
카운터에 대한 설명은 '설명 버튼'을 눌러 잘 확인해보자.

---------------------------------------------------------------------------------
나머지는 네이버 친구로 부터 확인할 수 있었던 정보들~
원문 출처 못찾아서 그냥 긁었음 ㅎㅎ

Processor
% Processor Time  - 총 프로세서 사용량, Privileged time + User time (70% 이상은 과부하)
% Privileged Time - 시스템이 사용한 CPU 시간의 백분율
% User Time - 사용자모드에서 사용한 CPU 시간의 백분율
Interrupts/sec - 프로세스가 받아 처리한 하드웨어 인터럽트이 평균 비율(초당)-App에서 App로 넘어가는 시간

System
Processor Queue Length - CPU의 연산을 하기 위해 대기하는 Queue (2 이상이면 과부하)

Memory
Available Bytes - 사용 가능한 메모리 용량(byte)
Committed Bytes - 최대 사용한 메모리 용량(Available bytes와 반대)
Pages/sec - 초당 페이징 파일 사용 횟수 (30 이상 올라가면 오버) / 사용하면 RAM으로 올리고 사용안하면 VM내림
Page Reads/sec - 가상메모리를 읽은 비율
Page Writes/sec - 가상메모리에 쓴 비율(메모리를 비우기 위해)
Pool Paged Bytes - 페이지 풀은 사용되지 않고 있을 때 디스크에 쓸 수 있는 개체의 시스템 메모리 영역
Pool NonPaged Bytes - 페이지 되지 않은 바이트(20, 수치가 높으면 어플리케이션의 문제)
Page Fault/Sec
Paging File
% Usage - 사용하고 있는 Page File 인스턴스 양을 백분율로 표시한 것

Physical Disk
% Disk Time - Read/Write 요청을 처리하는데 사용된 시간의 백분율(50~60% 이상이면 과부하)
Avg. Disk Queue Length - 디스크에 대해 대기열에 있는 읽기 및 쓰기 요청의 평균 수
Current Disk Queue Length - 디스크를 읽기 위해서 대기하는 Queue (2 이상이면 IO많음 과부하)
Disk Reads/sec - 디스크에서의 읽기 작업 횟수
Disk Writes/sec - 디스크에서의 쓰기 작업 횟수
Logical Disk
% Free Space - 전체 사용할 수 있는 빈 공간의 백분율

Network
Bytes Total/sec - NIC를 통하며 보내고 받는 바이트의 비율(Received/Sent)
Network Segment
% Network Utilization - 50%가 넘으면 과부하
Server Work Queues
Queue Length - CPU의 현재 작업 큐의 길이(4 이상이면 병목)

Server
Bytes Total/sec - 네트워크에서 주고 받은 바이트 수
Logon/sec - 초당 로그온 수(로그온 비율)
Logon Total - 총 로그온 수(대화형 로그온,네트워크 로그온,서비스 로그온,성공한 로그온,실패한 로그온등)

[Win32] 시스템 메모리 정보 확인

저장소/VC++

[출처]
KJH님 : www.swip.co.kr
MSDN : http://msdn.microsoft.com/en-us/library/aa366589(VS.85).aspx


//  Sample output:
//  There is       51 percent of memory in use.
//  There are 2029968 total Kbytes of physical memory.
//  There are  987388 free Kbytes of physical memory.
//  There are 3884620 total Kbytes of paging file.
//  There are 2799776 free Kbytes of paging file.
//  There are 2097024 total Kbytes of virtual memory.
//  There are 2084876 free Kbytes of virtual memory.
//  There are       0 free Kbytes of extended memory.

#include <windows.h>
#include <stdio.h>

// Use to convert bytes to KB
#define DIV 1024

// Specify the width of the field in which to print the numbers.
// The asterisk in the format specifier "%*I64d" takes an integer
// argument and uses it to pad and right justify the number.
#define WIDTH 7

void main(int argc, char *argv[])
{
  MEMORYSTATUSEX statex;

  statex.dwLength = sizeof (statex);

  GlobalMemoryStatusEx (&statex);

  printf ("There is  %*ld percent of memory in use.\n",
          WIDTH, statex.dwMemoryLoad);
  printf ("There are %*I64d total Kbytes of physical memory.\n",
          WIDTH, statex.ullTotalPhys/DIV);
  printf ("There are %*I64d free Kbytes of physical memory.\n",
          WIDTH, statex.ullAvailPhys/DIV);
  printf ("There are %*I64d total Kbytes of paging file.\n",
          WIDTH, statex.ullTotalPageFile/DIV);
  printf ("There are %*I64d free Kbytes of paging file.\n",
          WIDTH, statex.ullAvailPageFile/DIV);
  printf ("There are %*I64d total Kbytes of virtual memory.\n",
          WIDTH, statex.ullTotalVirtual/DIV);
  printf ("There are %*I64d free Kbytes of virtual memory.\n",
          WIDTH, statex.ullAvailVirtual/DIV);

  // Show the amount of extended memory available.

  printf ("There are %*I64d free Kbytes of extended memory.\n",
          WIDTH, statex.ullAvailExtendedVirtual/DIV);
}

[Win32] PDH Error Codes

저장소/VC++

[출처]
MSDN


Performance Data Helper Error Codes

All Performance Data Helper (PDH) functions return a value of type PDH_STATUS. If the function succeeds, the return value is ERROR_SUCCESS. Otherwise, the function returns a system error code or a PDH error code. To retrieve the description text for the error in your application, use the FormatMessage function.

For data collection and formatting functions, it is important to remember that the return value of the function indicates the success or error of the function call and not necessarily that of the counter data. Always check the CStatus member of the counter value returned to ensure that the data returned is valid before you use it. If the value of the CStatus member does not indicate success, do not use the data.

The following table provides a list of error codes that are specific to PDH. These values are defined in the PDHMsg.h header file (for C programming) and PDHDefs.txt (for Visual Basic programming).

Error code Description
0x00000000 (PDH_CSTATUS_VALID_DATA) The returned data is valid.
0x00000001 (PDH_CSTATUS_NEW_DATA) The return data value is valid and different from the last sample.
0x800007D0 (PDH_CSTATUS_NO_MACHINE) Unable to connect to the specified computer, or the computer is offline.
0x800007D1 (PDH_CSTATUS_NO_INSTANCE) The specified instance is not present.
0x800007D2 (PDH_MORE_DATA) There is more data to return than would fit in the supplied buffer. Allocate a larger buffer and call the function again.
0x800007D3 (PDH_CSTATUS_ITEM_NOT_VALIDATED) The data item has been added to the query but has not been validated nor accessed. No other status information on this data item is available.
0x800007D4 (PDH_RETRY) The selected operation should be retried.
0x800007D5 (PDH_NO_DATA) No data to return.
0x800007D6 (PDH_CALC_NEGATIVE_DENOMINATOR) A counter with a negative denominator value was detected.
0x800007D7 (PDH_CALC_NEGATIVE_TIMEBASE) A counter with a negative time base value was detected.
0x800007D8 (PDH_CALC_NEGATIVE_VALUE) A counter with a negative value was detected.
0x800007D9 (PDH_DIALOG_CANCELLED) The user canceled the dialog box.
0x800007DA (PDH_END_OF_LOG_FILE) The end of the log file was reached.
0x800007DB (PDH_ASYNC_QUERY_TIMEOUT) A time-out occurred while waiting for the asynchronous counter collection thread to end.
0x800007DC (PDH_CANNOT_SET_DEFAULT_REALTIME_DATASOURCE) Cannot change set default real-time data source. There are real-time query sessions collecting counter data.
0xC0000BB8 (PDH_CSTATUS_NO_OBJECT) The specified object is not found on the system.
0xC0000BB9 (PDH_CSTATUS_NO_COUNTER) The specified counter could not be found.
0xC0000BBA (PDH_CSTATUS_INVALID_DATA) The returned data is not valid.
0xC0000BBB (PDH_MEMORY_ALLOCATION_FAILURE) A PDH function could not allocate enough temporary memory to complete the operation. Close some applications or extend the page file and retry the function.
0xC0000BBC (PDH_INVALID_HANDLE) The handle is not a valid PDH object.
0xC0000BBD (PDH_INVALID_ARGUMENT) A required argument is missing or incorrect.
0xC0000BBE (PDH_FUNCTION_NOT_FOUND) Unable to find the specified function.
0xC0000BBF (PDH_CSTATUS_NO_COUNTERNAME) No counter was specified.
0xC0000BC0 (PDH_CSTATUS_BAD_COUNTERNAME) Unable to parse the counter path. Check the format and syntax of the specified path.
0xC0000BC1 (PDH_INVALID_BUFFER) The buffer passed by the caller is not valid.
0xC0000BC2 (PDH_INSUFFICIENT_BUFFER) The requested data is larger than the buffer supplied. Unable to return the requested data.
0xC0000BC3 (PDH_CANNOT_CONNECT_MACHINE) Unable to connect to the requested computer.
0xC0000BC4 (PDH_INVALID_PATH) The specified counter path could not be interpreted.
0xC0000BC5 (PDH_INVALID_INSTANCE) The instance name could not be read from the specified counter path.
0xC0000BC6 (PDH_INVALID_DATA) The data is not valid.
0xC0000BC7 (PDH_NO_DIALOG_DATA) The dialog box data block was missing or not valid.
0xC0000BC8 (PDH_CANNOT_READ_NAME_STRINGS) Unable to read the counter and/or help text from the specified computer.
0xC0000BC9 (PDH_LOG_FILE_CREATE_ERROR) Unable to create the specified log file.
0xC0000BCA (PDH_LOG_FILE_OPEN_ERROR) Unable to open the specified log file.
0xC0000BCB (PDH_LOG_TYPE_NOT_FOUND) The specified log file type has not been installed on this system.
0xC0000BCC (PDH_NO_MORE_DATA) No more data is available.
0xC0000BCD (PDH_ENTRY_NOT_IN_LOG_FILE) The specified record was not found in the log file.
0xC0000BCE (PDH_DATA_SOURCE_IS_LOG_FILE) The specified data source is a log file.
0xC0000BCF (PDH_DATA_SOURCE_IS_REAL_TIME) The specified data source is the current activity.
0xC0000BD0 (PDH_UNABLE_READ_LOG_HEADER) The log file header could not be read.
0xC0000BD1 (PDH_FILE_NOT_FOUND) Unable to find the specified file.
0xC0000BD2 (PDH_FILE_ALREADY_EXISTS) There is already a file with the specified file name.
0xC0000BD3 (PDH_NOT_IMPLEMENTED) The function referenced has not been implemented.
0xC0000BD4 (PDH_STRING_NOT_FOUND) Unable to find the specified string in the list of performance name and help text strings.
0x80000BD5 (PDH_UNABLE_MAP_NAME_FILES) Unable to map to the performance counter name data files. The data will be read from the registry and stored locally.
0xC0000BD6 (PDH_UNKNOWN_LOG_FORMAT) The format of the specified log file is not recognized by the PDH DLL.
0xC0000BD7 (PDH_UNKNOWN_LOGSVC_COMMAND) The specified Log Service command value is not recognized.
0xC0000BD8 (PDH_LOGSVC_QUERY_NOT_FOUND) The specified query from the Log Service could not be found or could not be opened.
0xC0000BD9 (PDH_LOGSVC_NOT_OPENED) The Performance Data Log Service key could not be opened. This may be due to insufficient privilege or because the service has not been installed.
0xC0000BDA (PDH_WBEM_ERROR) An error occurred while accessing the WBEM data store.
0xC0000BDB (PDH_ACCESS_DENIED) Unable to access the desired computer or service. Check the permissions and authentication of the log service or the interactive user session against those on the computer or service being monitored.
0xC0000BDC (PDH_LOG_FILE_TOO_SMALL) The maximum log file size specified is too small to log the selected counters. No data will be recorded in this log file. Specify a smaller set of counters to log or a larger file size and retry this call.
0xC0000BDD (PDH_INVALID_DATASOURCE) Cannot connect to ODBC DataSource Name.
0xC0000BDE (PDH_INVALID_SQLDB) SQL Database does not contain a valid set of tables for Perfmon.
0xC0000BDF (PDH_NO_COUNTERS) No counters were found for this Perfmon SQL Log Set.
0xC0000BE0 (PDH_SQL_ALLOC_FAILED) Call to SQLAllocStmt failed with %1.
0xC0000BE1 (PDH_SQL_ALLOCCON_FAILED) Call to SQLAllocConnect failed with %1.
0xC0000BE2 (PDH_SQL_EXEC_DIRECT_FAILED) Call to SQLExecDirect failed with %1.
0xC0000BE3 (PDH_SQL_FETCH_FAILED) Call to SQLFetch failed with %1.
0xC0000BE4 (PDH_SQL_ROWCOUNT_FAILED) Call to SQLRowCount failed with %1.
0xC0000BE5 (PDH_SQL_MORE_RESULTS_FAILED) Call to SQLMoreResults failed with %1.
0xC0000BE6 (PDH_SQL_CONNECT_FAILED) Call to SQLConnect failed with %1.
0xC0000BE7 (PDH_SQL_BIND_FAILED) Call to SQLBindCol failed with %1.
0xC0000BE8 (PDH_CANNOT_CONNECT_WMI_SERVER) Unable to connect to the WMI server on requested computer.
0xC0000BE9 (PDH_PLA_COLLECTION_ALREADY_RUNNING) Collection "%1!s!" is already running.
0xC0000BEA (PDH_PLA_ERROR_SCHEDULE_OVERLAP) The specified start time is after the end time.
0xC0000BEB (PDH_PLA_COLLECTION_NOT_FOUND) Collection "%1!s!" does not exist.
0xC0000BEC (PDH_PLA_ERROR_SCHEDULE_ELAPSED) The specified end time has already elapsed.
0xC0000BED (PDH_PLA_ERROR_NOSTART) Collection "%1!s!" did not start; check the application event log for any errors.
0xC0000BEE (PDH_PLA_ERROR_ALREADY_EXISTS) Collection "%1!s!" already exists.
0xC0000BEF (PDH_PLA_ERROR_TYPE_MISMATCH) There is a mismatch in the settings type.
0xC0000BF0 (PDH_PLA_ERROR_FILEPATH) The information specified does not resolve to a valid path name.
0xC0000BF1 (PDH_PLA_SERVICE_ERROR) The "Performance Logs & Alerts" service did not respond.
0xC0000BF2 (PDH_PLA_VALIDATION_ERROR) The information passed is not valid.
0x80000BF3 (PDH_PLA_VALIDATION_WARNING) The information passed is not valid.
0xC0000BF4 (PDH_PLA_ERROR_NAME_TOO_LONG) The name supplied is too long.
0xC0000BF5 (PDH_INVALID_SQL_LOG_FORMAT) SQL log format is incorrect. Correct format is "SQL:<DSN-name>!<LogSet-Name>".
0xC0000BF6 (PDH_COUNTER_ALREADY_IN_QUERY) Performance counter in PdhAddCounter call has already been added in the performance query. This counter is ignored.
0xC0000BF7 (PDH_BINARY_LOG_CORRUPT) Unable to read counter information and data from input binary log files.
0xC0000BF8 (PDH_LOG_SAMPLE_TOO_SMALL) At least one of the input binary log files contain fewer than two data samples.
0xC0000BF9 (PDH_OS_LATER_VERSION) The version of the operating system on the computer named %1 is later than that on the local computer. This operation is not available from the local computer.
0xC0000BFA (PDH_OS_EARLIER_VERSION) Supports %2 or later. Check the operating system version on the computer named %3.
0xC0000BFB (PDH_INCORRECT_APPEND_TIME) The output file must contain earlier data than the file to be appended.
0xC0000BFC (PDH_UNMATCHED_APPEND_COUNTER) Both files must have identical counters in order to append.
0xC0000BFD (PDH_SQL_ALTER_DETAIL_FAILED) Cannot alter CounterDetail table layout in SQL database.
0xC0000BFE (PDH_QUERY_PERF_DATA_TIMEOUT) System is busy. A time-out occurred when collecting counter data. Please retry later or increase the CollectTime registry value.

[Win32] GetLastInputInfo와 LASTINPUTINFO

저장소/VC++
Idle Time에 관련된 정보 수집 중에 정리.
사용자 입력이 일정 시간동안 없는 경우를 확인하고자 할 때 아래와 같이 확인할 수 있다.

사용되는 API는 다음과 같다.

[GetLastInputInfo]


함수의 원형은 아래와 같다.
BOOL GetLastInputInfo(      
    PLASTINPUTINFO plii
);

간단히 설명하자면 GetLastInputInfo API는 마지막 입력 이벤트의 시간을 반환한다.
여기서 입력 이벤트라 함은 keyboard/mouse 모두를 포함한 의미이다.
다른 입력장치가 있다면? 다른 입력장치 없어서 모르겠다. -_-;;;
아무튼 나머지 정보는 아래와 같다.
Minimum DLL Version : user32.dll
Header : Declared in winuser.h, include windows.h
Import Library : User32.lib
Minimum Operating System : Windows 2000

Return Value : 0이 아니면 성공, 0이면 실패
Parameters : PLASTINPUTINFO로 마지막 입력 이벤트 발생 시간을 얻는다.

자, 이제 파라미터인 LASTINPUTINFO에 대해 알아보자.
LASTINPUTINFO 구조체의 원형과 기타 정보는 아래와 같다.
typedef struct tagLASTINPUTINFO {
    UINT cbSize;
    DWORD dwTime;
} LASTINPUTINFO, *PLASTINPUTINFO;


Header : Declared in winuser.h, include windows.h
Minimum Operating System : Windows 2000

LASTINPUTINFO의 멤버에 대한 설명은 아래와 같다.
cbSize : 크기값, 크기는 sizeof(LASTINPUINFO)로 설정해야 한다.
dwTime : 마지막 입력 이벤트 발생 시간(Tick count)을 받는다. 초기값은 그냥 0으로 해준다.



뭐... 일단 재료는 준비됐고~
아주아주 간단하게 샘플을 끄적거려보자.

조건 : 5초 동안 입력 이벤트가 발생하지 않으면 시스템 비프음을 발생하고 종료한다.

int main()
{
   LASTINPUTINFO lastInput;
   lastInput.dwTime = 0;
   lastInput.cbSize = sizeof(LASTINPUTINFO);

   while(1)
   {
      if(GetLastInputInfo(&lastInput))   // 마지막 입력 이벤트 발생시간 획득
      {
         printf("Last Input Info time : %d\n", lastInput.dwTime);

         // 5초 동안 입력이 없을 경우
         if(GetTickCount() - lastInput.dwTime > 5000)
         {
             printf("\a");   // 비프음 발생
             break;
         }

         printf("\n");
         Sleep(1000);   // 1초 대기후 다시 확인
      }
   }

   return 0;
}


음... 재밌군 ㅋ


[참고]
MSDN  http://msdn.microsoft.com/en-us/library/ms646302(VS.85).aspx
데브피아

[펌] MFC 헤더와 라이브러리 설명

저장소/VC++

[출처] MFC 모든 헤더와 라이브러리 설명 [2]|작성자 헤이즐넛


다음글은 하이텔  MFC소모임의 시삽이신 권정혁님의 글을 정혁님의 허락하에
다음과 같이 기재합니다. 허락해주신 정혁님께 감사드립니다.
****************************************************************************

이 글은 Mike Blaszczak 의 책 "Professional MFC" 의 Appendix D 에 들어있는
내용을 번역한 글입니다. 제 허락없이는 다른 어떤게시판에도 옮기실수 없습니
다. 물론 글의 원 소유자는 Mike 입니다.

                                            MFC&T 사용자 모임 시삽 권정혁

============================================================================
MFC 헤더와 라이브러리 설명 (The Foundation Classes Headers and Libraries) #2

2. 런타임 라이브러리 (Run-time Libraries)

이 테이블은 Visual C++ 과 함께 제공되는 라이브러리와 Pre-Compiled Object 들의 
기능에 대한 짧은 설명을 보여줍니다.

------------------------------------------------------------------------------
런타임 라이브러리 (Run-time Libraries)
------------------------------------------------------------------------------

파일설명

Advapi32.lib  레지스트리나 보안 관련 API 같은 진보된 API 서비스 들에 대한 
              임포트 라이브러리 입니다. 이 임포트 라이브러리와 링크하는 것은
              당신의 프로그램에서 Advapi32.dll에 포함된 함수들을 사용가능하게
              합니다.

Atl.lib       MS의 Active Template Library에 대한 라이브러리입니다.

Binmode.obj   이 모듈과 링크하면 C 런타임 라이브러리에 의해 오픈되는 화일들이
              기본적으로 Binary 모드로 열리도록 만듭니다.

Cap.lib       Call Attributed Profiler 에 대한 인터페이스 입니다. 
              이 툴은 함수 호출 패턴(Function Call Patterns)을 분석함으로써 
              Win32 어플리케이션을 튜닝하게 해줍니다.

Chkstk.obj    런타임용 Stak-Depth 체킹 모듈입니다. 
              이 모듈은 모든 함수 호출전에 스택의 크기(Depth)를 체크함으로써 
              Stack Overflow 가 났는지 체크하는 것을 도와줍니다. 
              Windows NT 에서는 프로그램의 스택 세그먼트를 조심스레 체크하며,
              스택 오버플로우가 난다면 프로그램을 깨끗히 종료시켜주므로 
              이 파일은 거의 필요가 없습니다. 

Comctl32.lib  윈도우 공용 컨트롤(Windows common controls)에 대한 라이브러리 
              입니다.

Comdlg32.lib  윈도우 공용 대화상자(Windows common dialogs)에 대한 라이브러리
              입니다. 이 라이브러리는 표준 화일오픈,화일저장,폰트선택,프린트
              ,컬러 선택 다이얼로그에 대한 인터페이스를 제공합니다.

Commode.obj   전역적인 File Commit Flag 값을 Commit 으로 설정합니다. 
              이 파일과 링크하는것은 오픈되는 모든화일이 기본적으로 Commit 
              모드에서 열리도록 합니다.

Compmgr.lib   컴포넌트에대한 임포트 라이브러리입니다.

Ctl3d32.lib   3차원(Three-D) 컨트롤에대한 지원 라이브러리입니다. 
              이 라이브러리는 다이알로그와 컨트롤이 3차원으로 보이도록 합니다.
              이 파일은 거의 안쓰입니다. 단지 이전버젼과의 호환을 위해 
              제공됩니다.

Ctl3d32s.lib  Win32s 용 프로그램에대한 Ctl3d 라이브러리 입니다.

D3drm.lib     Direct3D 렌더링 모델(Rendering Model) API에 대한 
              라이브러리입니다.

Daouuid.lib   DAO 객체들에 대한 UUID 값을 가지고 있는 라이브러리입니다.

Ddraw.lib     DirectDraw API용 라이브러리입니다.

Dflayout.lib  Compound Document File(복합문서파일)에 대한 저장소 관리
              (Storage Management)를 하는 OLE 함수들에 대한 임포트 
              라이브러리입니다.

Dlcapi.lib    DLC 3270 연결을 위한 라이브러리 입니다.

Dplay.lib     DirectPlay API용 라이브러리 입니다.

Dsound.lib    DirectSound API용 라이브러리입니다.

Fp10.obj      이 모듈과 링크하는것은 프로그램이 기본적으로 53비트 대신 64비트
              부동소수점(Floating-Point Precision) 형식으로 알고리즘을 
              사용하게 합니다.

Gdi32.lib     Windows GDI 임포트 라이브러리 입니다. 이 라이브러리와 링크하는
              것은 프로그램이 Windows 의 Graphic Device Interface 에 있는 
              SelectObject(),CreateFont(),LineTo() 와 같은 루틴을 호출하여 
              디스플레이나 프린터에 그리기를 수행할수 있도록 합니다. 

Glaux.lib     OpenGL 보조 함수 라이브러리 입니다. 거의 모든 프로그램에서 
              사용되지 않으나, 이것은 OpenGL의 핵심(Core) 라이브러리의 기능을
              향상시키도록 합니다. Opengl32.lib도 참조하십시오.

Glu32.lib     OpenGL 그래픽의 핵심 함수 라이브러리 입니다. 
              Opengl32.lib도 참조하십시오.

Hlink.lib     IHlink 와 관련 인터페이스 지원용 라이브러리 입니다. 
              이 인터페이스들은 ActiveX 객체가 일반적인 하이퍼링크 스타일
              (Hyperlink-Style)의 이동을 구현하는것을 도와줍니다.

Imagehlp.lib  디버거 같은 시스템 툴들이 다른 프로세스를 관리하고 디버그 
              정보를 추출하도록 하는 루틴이 들어있는 라이브러리 입니다.

Imm32.lib     Input Method Editor(IME)의 사용에 라이브러리입니다. 
              IME는 조그만 팝업윈도우창으로 보이며,다른나라 글자를 선택하도록
              해줍니다. (한글윈도우 사용자는 다들 아시죠..? )

Kernel32.lib  Windows Kernel 의 임포트 라이브러리입니다. 이 라이브러리와 
              링크함으로써 Windows kernel 안에 들어있는 루틴의 호출이 가능해 
              집니다. Windows Kernel 에는 CreateSemaphore() 나 GlobalAlloc()
              같은 함수들이 포함되어 있습니다.

Largeint.lib  수학계산용 Large Interger지원 라이브러리입니다. 이 라이브러리는
              단지 호환목적으로 제공됩니다. Visual C++ 의 컴파일러는 
              기본적으로 64Bit Integer 를 지원합니다.

Libc.lib      표준 C Runtime 라이브러리입니다. 이 라이브러리는 sprintf() 나 
              strcpy() 같은 함수들이 포함되며,프로그램에 정적으로 링크됩니다.
              이것은 멀티쓰레드나 재진입(re-entrant) 프로그램에는 안전하지 
              못합니다.

Libcd.lib     표준 C Runtime 라이브러리의 Debug 버젼입니다. Debug 빌드에선 
              Libc.lib 대신 이것을 사용합니다. 이것은 프로그램에 정적으로 
              링크됩니다.

Libci.lib     표준 C 라이브러리입니다.이 라이브러리는 Libc.lib 와 비슷하지만,
              이것은 이전 버젼의 Visual C++ 에서 제공된 표준 라이브러리에서
              지원된 표준 iostream 라이브러리와의 호환성을 제공합니다.
              (iostream이 구형이라는 얘기죠..) 이것은 프로그램에 정적으로
              링크됩니다.

Libcid.lib    구형 iostream 버젼이 포함된 표준 C 라이브러리의 Debug버젼입니다.
              역시 프로그램에 정적으로 링크됩니다.

Libcimt.lib   구형 iostream 버젼이 포함된 표준 C 라이브러리의 멀티쓰레드에 
              안전한 버젼입니다. 역시 프로그램에 정적으로 링크됩니다.

Libcimtd.lib  구형 iostream 버젼이 포함된 표준 C 라이브러리의 멀티쓰레드버젼의
              Debug 빌드입니다. 역시 프로그램에 정적으로 링크됩니다.

Libcmt.lib    멀티쓰레드 프로그램이나 재진입 프로그램에서도 사용이 안전한 
              sprintf() 나 strcpy() 같은 함수들이 포함된 C 런타임 라이브러리의
              멀티쓰레드 버젼입니다. 역시 프로그램에 정적으로 링크됩니다.

Libcmtd.lib   바로위의 Libcmt.lib의 디버그 버젼입니다. 
              역시 프로그램에 정적으로 링크됩니다. 

Libcp.lib     표준 C++ 런타임 라이브러리 입니다. 이것은 호출하는 프로그램에 
              정적으로 링크되며, 멀티쓰레드나 재진입 프로그램에 안전하지 
              못합니다.

Libcpd.lib    표준 C++ 런타임 라이브러리의 Debug 버젼입니다. 
              역시 프로그램에 정적으로 링크됩니다.

Limcpmt.lib   표준 C++ 런타임 라이브러리의 멀티쓰레드 버젼입니다. 
              역시 프로그램에 정적으로 링크됩니다.

Libcpmtd.lib  멀티쓰레드 C++ 표준 라이브러리의 디버그 버젼입니다. 
              역시 프로그램에 정적으로 링크됩니다.

Loadperf.lib  이 임포트 라이브러리는 Performance Counter 에 관련된 레지스트리 
              값들의 초기화를 지원하는 루틴들을 포함합니다. 
              이 라이브러리는 보통 인스톨 프로그램들에 사용됩니다.

Lz32.lib      Lempel-Ziv압축해제 루틴 라이브러리입니다. 보통 인스톨 프로그램에
              의해서 사용됩니다. 이 라이브러리는 압축루틴이 없으며, 
              단지 압축해제루틴만 들어있습니다.

Mapi32.lib    Microsoft Mail API 라이브러리 입니다..

Mfcapwz.lib   Custom Wizard의 개발을 가능하게 해주는 클래스와 함수들이 포함된
              라이브러리입니다.

Mfcclwz.lib   Custom Wizard의 개발을 가능하게 해주는 클래스와 함수들이 포함된
              라이브러리입니다.

Mfcuia32.lib  OLE 공통 사용자 인터페이스(Common User Interface)에 대한 MFC 의
              구현부분이 들어있습니다. Oledlg.lib 와 비슷하지만 Unicode 대신 
              ANSI 인터페이스를 지원합니다.

Mgmtapi.lib   SNMP(Simple Network Management Protocol) Management API입니다.

Mpr.lib       연결관리(Connection Management)를 위한 LAN Manager 스타일의 
              네트웍 API 가 들어있습니다. 이 API 들은 Windows 상에서 Connect와
              DIsconnet 를 가능하게 합니다.

Msacm32.lib   Microsoft Audio Compression Manager API(오디오 압축 관리자 API) 
              입니다. 이것은 Audio Waveform 데이타를 압축하고 해제하는 
              유틸리티들입니다.

Msconf.lib    Microsoft ActiveX Conferencing API 에 대한 라이브러리입니다.

Mslsp32.lib   License Service API 에 대한 임포트 라이브러리입니다.

Msvcirt.lib   구형 iostream 버젼이 포함된 표준 C 라이브러리의 DLL Build에 대한
              임포트 라이브러리 입니다. 이 라이브러리는 Libci.lib 라이브러리의
              DLL 버젼에 대한 임포트 라이브러리입니다.

Msvcirtd.lib  Mscvirt.lib 라이브러리의 디버그 버젼에 대한 임포트 라이브러리
              입니다.

Msvcprt.lib   표준 C++ 라이브러리의 DLL Build 에 대한 임포트 라이브러리입니다.
              이것은 Libcp.lib 라이브러리의 DLL 버젼에 대한 임포트 라이브러리
              입니다. 

Msvcprtd.lib  Msvcprt.lib 라이브러리의 디버그 버젼에 대한 임포트 라이브러리
              입니다.

Msvcrt.lib    표준 C 라이브러리의 DLL Build 에 대한 임포트 라이브러리입니다.
              이것은 Libc.lib 라이브러리의 DLL 버젼에 대한 임포트 라이브러리
              입니다.

Msvcrtd.lib   Msvcrt.lib 라이브러리의 디버그 버젼에 대한 임포트 라이브러리
              입니다. Retail Build 에서 Msvcrt.lib 를 사용한다면 Debug Build 
              에서 이것을 사용하십시오.

Mswsock.lib   Windows Sockets 2 API 에 대한 Microsoft 의 특정 확장부분
              (MS-Specific Extension)에 대한 임포트 라이브러리입니다.

Mtx.lib       Microsoft Transaction Server(MTS) 프로그래밍 인터페이스 
              라이브러리입니다.

Mtxguid.lib   MTS 에 의해 지원되는 객체들의 Guid 들을 가지고 있는 
              라이브러리입니다.

Nddeapi.lib   Network DDE API 입니다. DDE 스타일의 서비스를 네트웍을 통하여
              시스템간에 사용가능하도록 해줍니다.

Netapi32.lib  LAN Manager API Interface 입니다. 이 라이브러리는 MS 의 NOS
              (Network Operation System)에 의해 제공되는 저수준의 기능들을 
              사용하도록 해주는 함수들을 포함하고 있습니다.

Newmode.obj   당신의 Application 이 malloc() 함수 호출에 실패했을때 new 
              연산자의 에러 처리 메커니즘을 사용하도록 하여줍니다. 기본적으로,
              이것이 동작하지는 않습니다: malloc() 이 실패한다면, NULL 을 
              리턴하지 예외를 발생시키지(Throw) 않습니다.               
              이 모듈과 링크하는것은 malloc() 호출 실패시 new 연산자의 에러
              처리루틴을 호출하는 것으로 C 런타임 라이브러리의 동작을 
              변경합니다.

Ocx96.lib     OCX 96 스펙(Specification)에 명시된 인터페이스들에 대한 
              UUID들이 포함된 라이브러리입니다.

Odbc32.lib    ODBC API 라이브러리입니다. 이 라이브러리는 데이터베이스 
              응용프로그램에 대한 하부 독립적인 API 들을 제공합니다. 
              이 라이브러리는 MFC 에 의해 다시 추상화 됩니다.

Odbccp32.lib  ODBC control panel applet(제어판에 등록되는 응용프로그램) 에
              관한 인터페이스가 포함된 라이브러리입니다.

Oldnames.lib  "Kernighan and Ritchie C" 와 호환되는 이름을 가진 
              표준 C 런타임 라이브러리 함수들입니다. 이 라이브러리는 K&R-C의
              execv() 같은것을 ANSI-C 의 같은 함수인 _execv() 에 매핑(Mapping)
              해줍니다. 

Ole32.lib     32-bit OLE 지원을 위한 Core 라이브러리입니다.

Oleaut32.lib  32-bit Automation interface에 대한 라이브러리입니다.

Oledlg.lib    OLE 공통 사용자 인터페이스(Common User Interface)에 대한 System 
              Implementation입니다. OleUiEditLinks() 나 OleInsertObject()와 
              같은 함수들을 포함합니다.

Olepro32.lib  OLE Property Frame API 입니다. 또한 OLE Font (IFont) 나 Picture
             (IPicture) 프로퍼티 들에 대한 구현도 포함하고 있습니다.

Opengl32.lib  OpenGL 의 Core 함수 라이브러리입니다. 
              OpenGL 은 Silicon Graphics에 의해 정의되고 Microsoft 에 의해 
              Win32 용으로 구현된 Graphic Rendering Language 입니다. 
              Glu32.lib 와 Glaux.lib 도 참조하십시오.

Pdh.lib       Performance Data 헬퍼함수들에 대한 임포트 라이브러리 입니다. 
              이 Win32 API의 부분들은 프로세스에대해 Performance Counter 들을
              작성하고,질의하고,갱신하는것을(Create,Query,Update) 도와주는 
              쉬운 인터페이스들을 포함하고 있습니다.

Penwin32.lib  Pen Computing 용 Windows에 대한 확장 라이브러리입니다.

Pkpd32.lib    Pen Windows 의 커널함수들입니다.

Rasapi32.lib  클라이언트용 Remote Access Service(RAS) API 입니다. 
              이 라이브러리에 있는 함수들은 모뎀이나 그 비슷한 저속회선 연결을
              통해 원격지 컴퓨터에 연결하도록 해줍니다. 

Rasdlg.lib    RAS 응용프로그램에 대한 Common User Interface 요소들을 포함하고
              있는 라이브러리입니다.

Rassapi.lib   RAS 서버쪽 API 들입니다.

Rpcndr.lib    Remote Procedure Call(RPC) Helper Function API 들입니다.

Rpcns4.lib    RPC Name Service 함수들 입니다.

Rpcrt4.lib    RPC Windows run-time 함수들 입니다.

Scrnsave.lib  화면보호기(Screen saver) 에 대한 인터페이스입니다.

Setargv.obj   이 모듈과 링크하는 것은 콘솔 프로그램이 Wildcard(*,?) 를 사용한 
              Command Line Parameter들을 실제 파일이름들로 지정하도록 확장하여
              줍니다. 각 파일은 main() 의 argv 인자에 들어가게 됩니다. 
              윈도우에서 사용하려면 Wsetargv.obj 를 살펴보십시오.

Setupapi.lib  파일 설치와 삭제에 관련된 함수들입니다. 셋업프로그램에서 
              사용됩니다.

Shell32.lib   Windows Interface Shell API 들입니다. 이 API 들은 예를 들어 
              Norton Desktop for Windows와 같은 프로그램에 사용된 실행파일에서
              아이콘을 추출하거나 Command Line Parameter 를 사용해 다른 
              프로그램을 실행하는등의 기능을 제공합니다.

Snmpapi.lib   Simple Network Managerment Protocol(SNMP)에 관련된 주 API 함수들
              입니다. TCP/IP 네트웍에 대해 이 프로토콜은 Gateway 나 연결될 
              네트웍들을 모니터링하는데 사용됩니다. Mgmtapi.lib 와 연관되어 
              있습니다.

Svrapi.lib    Inter-Server Communication 에 관한 Network API 들입니다.

Tapi32.lib    Microsoft Telephony API(TAPI) 라이브러리입니다. lineOpen() 과 
              같은 telephony API 들을 구현합니다.

Th32.lib      32-bit Toolhelp 라이브러리입니다. 이 라이브러리는 Debugger 나 
              저수준의 툴을 작성할때 도움을 주는 함수들을 제공합니다. 
              예를들어 이 라이브러리의 루틴들을 윈도우상에서 프로세스나 
              쓰레드들을 Enumerate 하게 해줍니다.

Thunk32.lib   Thunk 컴파일러의 런타임 지원 루틴들입니다.
              (Thunking 이 뭔지 아시죠?)

Url.lib       이 파일은 URL 을 Parsing 하거나 MIME 헤더를 해석하는데 사용하는
              루틴입니다. 이 라이브러리에 있는 함수들은 현재 문서화가 되어있지
              않으며, 이것은 Win32 SDK 의 이후 버젼이나 Visual C++ 의 이후버젼
              에서 더 정제되고, 무리없게 지원될것입니다. 

Urlmon.lib    URL 모니커(moniker)의 런타임 지원 라이브러리에 대한 임포트 
              라이브러리입니다.

User32.lib    윈도우즈의 USER.EXE 에 대한 임포트 라이브러리 입니다. 
              이 라이브러리와 링크하는 것은 프로그램이 Windows 의 UI 부분을 
              사용할수 있도록 해줍니다. 이 라이브러리는 CreateDialog() 나 
              CreateWindow() 같은 함수를 포함합니다.

Uuid.lib      Stock(내장된) OLE 객체에 대한 표준 UUID 들입니다.

Vdmdbg.lib    이 라이브러리에 있는 함수들은 NT VDM 안에서 디버깅 하는것에 
              관련된 기능들을 지원합니다.

Version.lib   GetFileVersion() 과 같은 버젼 확인 API 들입니다.

Vfw32.lib     Video for Windows API 들입니다. 이 라이브러리에 있는 함수들은 
              Multimedia 비디오와 오디오를 재생,녹음,수정,저장 하는것을 
              가능하게 합니다.

Webpost.lib   WebPost API 임포트 라이브러리입니다. 이 라이브러리는 ISP
              (internet Service Provider)에 의해 제공되는 웹 사이트에 사용자의
              컴퓨터에서 데이타를 올리는것이 가능하도록 도와줍니다.

Win32spl.lib  Win32 spooler API 입니다. 이 파일에 있는 루틴들은 다른 프로그램
              이나 컴퓨터들로부터 Print Spooler Status에 접근하는것을 가능하게
              해줍니다.

Wininet.lib   Windows Internet Client API 들입니다.

Winmm.lib     Windows Multimedia API 들입니다. Multimedia Device Management, 
              Timer, Wave 파일, Multimedia I/O 제어함수 같은 것을 포함합니다.

Winspool.lib  The Win32 spooler API 입니다. 이 라이브러에 보이는 루틴들을 
              프로그램이 프린트 하는 동안 Windows Print Spooler 의 기능을
              사용하도록 해줍니다.

Winstrm.lib   Windows NT의 TCP/IP interface들 입니다. 이 파일은 TCP/IP Routing
              함수같은 것들을 제공합니다.

Wintrust.lib  ActiveX 객체에 대한 Trust Verification(신용확인) 에 관한 API들의
              임포트 라이브러리입니다. 이것은 WinVerifyTrust() 같은 함수들을 
              사용가능하도록 합니다.

Wow32.lib     이 라이브러리는 16-Bit 와 32-Bit 객체간에 핸들을 변형하도록 하는
              Generic Thunking 메커니즘에 의해 사용됩니다. 이 라이브러리는 
              또한 16 Bit 프로세스에서 32-Bit 메모리를 관리하도록 하는것을 
              도와줍니다.

Ws2_32.lib    Windows Sockets 2.0 API 입니다.

Wsetargv.obj  이 모듈과 링크하는 것은 Windows 프로그램이 Wildcard(*,?) 를 
              사용한 Command Line Parameter 들을 실제 파일이름들로 지정하도록
              확장하여 줍니다. 각 파일은 main()의 argv 인자에 들어가게 됩니다.
              콘솔 프로그램에 사용하려면 setargv.obj 를 살펴보십시오. 

Wsock32.lib   Windows Sockets APIs.

Wsock32.lib   Windows Sockets API 입니다.

Wst.lib       Working Set Tuner DLL 에 대한 인터페이스 입니다. 
              Working Set Tuner DLL 은 프로그램을 조사하여 프로그램의 
              Working Set 을 최소화하도록 도와줍니다.

=============================================================================

참고할점은 주 API 들과, 헤더 파일 그리고 라이브러리들의 요약이 Lib 디렉토리에 
있는 Win32api.csv 에 들어있다는 것입니다. 이 파일은 Comma Separated Variable 
File(*.csv) 이며,  엑셀같은 스프레드쉬트 프로그램에서 읽어들일수 있습니다.
 

--- 이것으로 해서 끝이네요.. 회사에서 점심,저녁시간에만 번역을 하다보니 
    시간이 한참 걸렸습니다. 도움이 되었으면 좋겠네요.. 그럼 이만..
 

[Error/Warning] 빌드할 때 문제가 발생했다면 여기로!

저장소/VC++
VC++ 빌드 시 발생하는 Error 또는 Warning에 대한 설명이 한가득~
모르면 이쪽부터 참고하자.


[자료 출처 - MSDN]
C/C++ 빌드 참조  http://msdn.microsoft.com/ko-kr/library/91621w01(VS.80).aspx

[Error/Warning] warning LNK4098

저장소/VC++
링크에 사용되는 RunTime Library와 충돌이 발생했을 때 발생하는 경고.

프로젝트 속성 중 RunTime Library를 다중 스레드 DLL(Multi Thread DLL)(/MD)로 변경할 경우
msvctr Library를 사용하게 된다.
이럴 경우 기본으로 사용되는 libcmt Library(다중 스레스(Multi Thread)(/MT)) 와 충돌을 일으켜 경고를 발생한다.
해결 방법으로는 프로젝트 속성 페이지의 명령줄에 /NODEFAULTLIB:libcmt.lib 를 추가하거나
특정 라이브러리 무시 항목에 libcmt.lib 를 추가하고 다시 빌드하면 된다.

MSDN에서 퍼온 아래의 내용도 참고하자.

[자료 출처]
MSDN http://msdn.microsoft.com/ko-kr/library/6wtdswk0(VS.80).aspx

링커 도구 경고 LNK4098

오류 메시지

'library' defaultlib가 다른 라이브러리와 충돌합니다. /NODEFAULTLIB:library를 사용하십시오.
defaultlib 'library' conflicts with use of other libs; use /NODEFAULTLIB:library

호환되지 않는 라이브러리에 링크하려고 했습니다.

Note참고

런타임 라이브러리에는 여러 형식이 혼합 사용되지 않도록 하는 지시문이 들어 있는데 여러 형식이나 디버그/비디버그 버전의 런타임 라이브러리를 동일한 프로그램에서 사용하려고 하면 이 경고가 발생합니다. 예를 들어, 어떤 종류의 런타임 라이브러리를 사용하는 파일을 컴파일하고 다른 종류의 런타임 라이브러리를 사용하는 파일을 컴파일한 다음(예: 단일 스레드 라이브러리와 다중 스레드 라이브러리) 이 둘을 링크시키려고 하면 이 경고가 발생합니다. 동일한 런타임 라이브러리를 사용하는 소스 파일을 컴파일해야 합니다. 자세한 내용은 런타임 라이브러리 사용(/MD, /MT, /LD) 컴파일러 옵션을 참조하십시오.

링커의 /VERBOSE:LIB 스위치를 사용하여 링커가 검색 중인 라이브러리를 확인할 수 있습니다. 예를 들어, LNK4098이 발생하여 단일 스레드된 비디버그 런타임 라이브러리를 사용하는 실행 파일을 만들려는 경우에는 /VERBOSE:LIB 옵션을 사용하여 링커에서 검색 중인 라이브러리를 확인하십시오. 링커는 검색한 라이브러리로 LIBC.lib를 출력하며 LIBCMT.lib, MSVCRT.lib, LIBCD.lib, LIBCMTD.lib 또는 MSVCRTD.lib는 출력하지 않습니다. 무시할 각 라이브러리에 대해 /NODEFAULTLIB를 사용하여 링커가 잘못된 런타임 라이브러리를 무시하도록 할 수 있습니다.

다음 표는 사용할 런타임 라이브러리에 따라 무시해야 하는 라이브러리를 보여 줍니다.

사용할 런타임 라이브러리 무시해야 하는 라이브러리

단일 스레드(libc.lib)

libcmt.lib, msvcrt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib

다중 스레드(libcmt.lib)

libc.lib, msvcrt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib

DLL을 사용하는 다중 스레드(msvcrt.lib)

libc.lib, libcmt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib

디버그 단일 스레드(libcd.lib)

libc.lib, libcmt.lib, msvcrt.lib, libcmtd.lib, msvcrtd.lib

디버그 다중 스레드(libcmtd.lib)

libc.lib, libcmt.lib, msvcrt.lib, libcd.lib, msvcrtd.lib

DLL을 사용하는 디버그 다중 스레드(msvcrtd.lib)

libc.lib, libcmt.lib, msvcrt.lib, libcd.lib, libcmtd.lib

예를 들어, 이 경고가 발생한 경우와 비디버그, 단일 스레드 버전의 런타임 라이브러리를 사용하는 실행 파일을 만들려는 경우에는 링커에 다음 옵션을 사용하면 됩니다.


[C++] DLL에서 메모리 할당, 외부에서 해제

저장소/VC++

아... 네이버님과 구글신께 물어봤으면 금방 해결할거를
하루종일 삽질하고있었기에 정리한다.

좋은 프로그래밍 습관 중 하나는 '메모리는 가급적 할당한 곳에서 해제하자.' 라고 할 수 있다.
사실 이 습관만 제대로 지킨다면 수많은 메모리 문제에서 약간은 해방될 수 있다고 생각한다.
물론 경우에 따라 다르겠지만 가급적이면 그렇게 하는 것이 좋다는거다.

이번에 생긴 문제는 제목 그대로 DLL에서 할당한 메모리는 외부에서 해제할 때 발생하였다.
(앞, 뒤 자르고 결론부터 말하자면 프로젝트 속성 중 '런타임 라이브러리'를 '다중 스레드 DLL'로
변경하니 잘 된다는거..;;;)
export한 DLL Function의 파라미터 중 하나를 STL list를 받게 구성하고 DLL 내부에서 문자열을 동적 할당한, list에 밀어넣고 외부에서 필요한 일을 한 후 delete할 때 문제 발생!!! 크아아아~
모르겠다 @_@

원인과 해결책은 이렇다고 한다.
DLL내부에서 STL객체를 생성하고 외부에서 STL객체를 사용 후 해제하려고 하면 access violation 발생한다. STL에서는 static data멤버를 사용한다. DLL내부(A라고 하자)에 STL객체를 생성하면 DLL내부에서는 static  data 멤버를 사용하게 된다. DLL을 이용하는 외부DLL/EXE(B라고 하자)에서 DLL내부(A)에 생성한 STL객체를 포인터나 레퍼런스로 접근가능 하지만, 외부 DLL/EXE(B)에서 STL객체를 사용하면 외부 DLL/EXE(B)에 STL에서 사용하는 static data멤버가 DLL(A)와 독립적으로 생성이 되기 때문에 외부DLL/EXE(B)에서 메모리를 해제하려고 하면 sync가 맞지않아 access violation이 발생하게 되는 것이다.
  위의 문제를 해결하는 방법은 아래와 같다.
  1) STL에서 생성한 객체를 접근하는 method를 export한다.
  2) 템플릿 클래스 인스턴스를 export하고 사용하는 곳(B)에서 import한다.
  3) 위 방법보다 간단한 방법으로 VC++ .NET의 경우 프로젝트 셋팅에서 "다중 쓰레드 DLL(/MD, release 모드)"나 "다중 쓰레드 디버그 DLL(/MDd, debug모드)"로 모두(A, B) 설정해주면 된다.

[출처 : http://jglee.egloos.com/1015547] 맘대로 퍼와서 미안해요;;

 
MS에 이러한 내용이 있으니 참고~ (달달 외우는게 좋을까?)

[STL (표준 템플릿 라이브러리) 클래스와 STL 개체가 데이터 구성원을 포함하고 있는 클래스 인스턴스를 내보내는 방법]
http://support.microsoft.com/kb/168958/
[포인터 또는 다른 DLL 또는 EXE 참조를 통해 STL 개체에 액세스할 때 액세스 위반이 발생할 수 있습니다.]
http://support.microsoft.com/kb/q172396/


아무튼 삽질이여 안녕~