반응형

Windows_/Windows32_API 19

Visual studio - x86, x64 환경에서 동작 빌드

/* * http://sosal.kr/ * made by so_Sal */ '올바른 win32 응용프로그램이 아닙니다.' 라는 메시지와 함께 배포한 프로그램이 동작하지 않는 컴퓨터가 있을 수 있습니다. 이러한 경우의 원인중에 2가지를 말씀 드리면 1. 사용자 컴퓨터에 .Net framework가 설치되어있지 않은경우 2. 프로그램이 x64 64비트 환경에서만 동작하도록 설정되어있는 경우 1번의 경우 사용자의 컴퓨터에 .Net framework 최신버전을 설치하면 간단하게 해결됩니다. - .Net Framework 설치 http://www.microsoft.com/ko-kr/download/details.aspx?id=30653 한국어 버전으로 설치하시면 간단히 해결됩니다. 2014. 10월 16일 기준으..

Windows :: 정적 라이브러리 만들기

/* * http://sosal.kr/ * made by so_Sal */ 1. 정적 라이브러리 만들기. 2. #pragma 명령어 사용하기 이번 포스팅은 그림과 Plus() 함수 기본 예제를 통해 설명해 나가도록 하겠습니다. 정적 라이브러리를 만들기 1.Win32 프로젝트를 생성합니다. Win32 project는 윈도우를 포함하여 DLL, static library 등을 만들 수 있습니다. 이름을 입력하여 생성한 후 을 누르지 말고, 다음을 누른 다음, 응용 프로그램 종류 :: 정적 라이브러리 아참, 지금 만드려는 라이브러리는 간단하게 살짝 짚고 가는거니.. 미리 컴파일된 헤더란에 체크를 풀고 마침 버튼을 ^-^; 그리고 하나의 헤더파일과 리소스 파일을 만들어 (소스, 리소스는 사실 차이가 없습니다.)..

Windows :: 라이브러리와 DLL

/* * http://sosal.kr/ * made by so_Sal */ 1. 라이브러리 2. DLL 3. DLL Export, Import 4. import library Library :: Static Library 함수, 데이터, 자료형 등 여러가지 프로그래밍 요소의 집합. 일반적으로 Library를 말하면 Statc library. 정적 라이브러리를 말한다. printf() 함수를 쓰기 위해서 #include 헤더파일을 추가해보았을 것이다. stdio.h :: extern int printf (__const char *__restrict __format, ...); 라는 구문이 있는데, 이 함수의 원형을 보자하면 끝이 없다. 이 굉장히 긴 코드를 단지 출력해주기 위해 매번 프로그램에 추가하는 것..

WinMain() , WNDCLASS 기본 윈도우 프로젝트

/* * http://sosal.kr/ * made by so_Sal */ 여기서 다룰 내용 int WinMain() struct WNDCLASS ShowWindow(); UpdateWindow(); GetMessage(); TranslateMessage(); DispatchMessage(); struct MSG int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd); WinMain 함수는 윈도우 기반 응용 프로그램을 위한 초기 진입점으로서 커널에 의해서 호출됩니다. HINSTANCE hInstance 현재 윈도우 응용 프로그램의 Instance(메모리) 핸들 윈도우 95 이전에는 프로세스마다 메모리가..

Windows :: 커널모드 스레드 동기화

/* * http://sosal.kr/ * made by so_Sal */ 커널모드 동기화 :: 뮤택스 동기화 기법 :: CreateMutex() :: WaitForSingleObject() :: ReleaseMutex() :: 세마포어 동기화 기법 :: CreateSemaphore() :: WaitForSingleObject() :: ReleaseSemaphore() :: 다중프로세스 동기화 // 이름있는 뮤텍스, 세마포어 :: Named Mutex, OpenMutex() :: Named Mutex, OpenSemaphore() :: 예제들 뮤텍스는 세마포어의 일부에 포함되는 기능중 하나입니다. 유저모드의 CriticalSection 관련 동기화 함수와 마찬가지로, 단 하나의 스레드만 임계영역에 접근 ..

Windows :: 유저모드 스레드 동기화

/* * http://sosal.kr/ * made by so_Sal */ 동기화에 대해서 기본적인 지식이 없다면.. 링크를 잠깐 확인하고 오세요 :: LINK_ 임계영역 :: 둘이상의 스레드가 동시에 접근하는 위험요소를 지니는 코드 블럭 쉽게 동기화는 임계영역 위험요소에 의해 발생될 문제를 제거하는 것이라 할 수 있다. 임계영역은 어떤 메모리를 말하는 것이 아니라, 위험요소를 지닌 코드입니다. 이 포스트에서 살펴볼 유저모드의 동기화 입니다. (다음 포스트에 커널모드로 연재합니다.) 이번장에서 살펴볼 내용 :: 1. 크리티컬 섹션 기반 동기화 + 예제 :: void InitializeCriticalSection(LPCRITICAL_SECTION lpCriticalSection); :: void Enter..

Windows :: 스레드의 동기화

/* * http://sosal.kr/ * made by so_Sal */ 동기화 :: 작업들 사이의 수행 시기를 맞추는 것. 사건이 동시에 일어나거나, 일정한 간격을 두고 일어나도록 시간의 간격을 조정하는 것을 이른다. 임계영역 :: 둘이상의 스레드가 동시에 접근하는 위험요소를 지니는 코드 블럭 쉽게 동기화는 임계영역 위험요소에 의해 발생될 문제를 제거하는 것이라 할 수 있다. 그렇다면, 둘 이상의 스레드가 동시접근 하는것이 왜 위험요소인가? 간단히 예를 들겠습니다. 스레드 A와 B가 전역변수 int (0)를 1만큼 증가시킨다고 가정해보면. 스레드 A는 int (0)의 값을 가져와서 1을 증가시킨다음, 원래 int (0) 가 존재하는 메모리에 증가시킨 값(1)으로 int (1)를 대입합니다. 여기서 발..

Windows :: 스레드의 상태 컨트롤과 프로세스및 스레드의 우선순위

/* * http://sosal.kr/ * made by so_Sal */ 스레드의 상태는 프로세스의 상태를 떠올리시면 됩니다. 실제로 Windows에서 상태가 변화하는 주체는 프로세스가 아닙니다. 스레드가 변화하는 것입니다. 위 그림은 프로세스의 상태변화를 나타내는 대표적인 그림입니다. 위 상태를 나타내는 준비, 실행, 대기 (ready, running, block)에 관한 내용은 스레드의 상태를 나타낸다고 보셔도 무방합니다. :: 프로세스의 상태와 우선순위에 대한 자세한 내용을 잘 모르신다면 :: 링크로 " LINK_ " 프로세스 우선순위 설정 함수 BOOL SetPriorityClass( HANDLE hProcess, DWORD dwPriorityClass) 원하는 프로세스의 핸들을 첫 매개변수에 ..

Windows :: 윈도우즈 스레드(thread) 프로그래밍

/* * http://sosal.kr/ * made by so_Sal */ 동시에 원하는 일을 하기 위해서, 다중 프로세스를 이용하였습니다. (다중프로세스와 스케쥴러에 대한 내용은 링크를 참조하세요 :: LINK_) 다중프로세스는 프로세스간의 자원을 공유하지 않고, IPC라는 방법을 사용하여 통신을 해야 하기 때문에, 다중 프로세스 프로그래밍에서는 메모리 낭비, 컨텍스트 스위칭에 의한 속도 저하 등 단점이 많습니다. 위 문제점을 극복하기 위해서 스레드 기법을 사용하였습니다. 한 프로세스 내에 스택을 여러개 두어, IPC처럼 메모리 공유가 필요한 부분은 공유하는 구조를 만드는 것입니다. 한 프로세스 안에서 스택을 여러개 생성하여, 메모리 흐름을 여러개 만들어서 다중프로세스처럼 한 프로세스가 한번에 다양한 ..

Windows :: 프로세스들을 실행하는 함수들

/* * http://sosal.kr/ * made by so_Sal */ 이번장에서 살펴볼 함수들 1.WinExec() CreateProcess() 2.ShellExecute() ShellExecuteEx() ================= 1. WinExec(), CreateProcess() ================= 아래는 WinExec() 와 CreateProcess()를 살펴보겠습니다. WinExec() 함수는 Windows 3.x 버전에서 새로운 프로세스 (프로그램)을 실행시키는 유일한 함수였습니다. 상당히 간결하게 사용할 수 있는 함수입니다. WinExec의 문제점은? :: 프로그램이 실행되고 나면 이전의 프로세스가 새로이 생성된 프로세스에게 간섭할 수 없다. (접근 불가) (프로그램이..

반응형