아도니스 카페 104번
예전 DOS는 프로그램 하나가 실행되면 그 프로그램이 프로그램적 기능말고도 키보드, 입력, 비디오 출력 등등 이런 부분까지 다 담당해야 했다. 무슨 OS도 아니고
그러다 보면 각각 프로그램마다 공통되는 부분의 중복이 생기게 되고 그래서 그 부분을 따로 만들어서 호출하는 식으로 쓰는게 더 좋아서 그렇게 한다.
64비트모드까지 가능한 CPU에서 32비트 OS라면 64비트 프로그램이 실행 안되네요 = 명령어 셋에서 기계어가 제대로된 명령어로 인지할테지만 OS가 ㅄ이네여 일단 64비트 OS에 32비트 프로그램이라면 돌릴수가 있겠지만;;(하위 호환.32비트 명령어 셋 이용하겟지 이땐)
윈도우 7쓰지말고 10써라 해놓고 7 지원하는거랑 같음 (이제 중단됬다는데 먼솔이라고 반박하지마 xp는 최장기간이라 이례적으로 그거에 반한거 무슨소리임 정신분열놀이임? 놀이는 아님)
->32bit os에서 64bit app를 예뮬레이션해서 될것같냐? 아니다 처리할수 없다. 주소공간 때문 (요건 2^32개까지의 주소만 표현 가능하므로)
다 같은 메모리지만 역할 용도가 상이함
메모리에 다른 하드웨어와 통신할때 쓰는 번지수있고(H/W 끼리를 다루기 위해, 그래픽 카드나 NIC 같은 것과의 연결) = 최대 4기가
메모리에 번지수는 그냥 공간들
거기다 메모리에 OS가 올려져있어 app가 쓸수 있는 공간을 실제로 더 적음
API = application programing interface
API 프로그래밍 = OS기반에서 제공되는 정해진 약속된 함수로 돌아가는 프로그램 작성을 의미 = OS의 API를 쓰기 위해 호출하기 위한 프로그래밍.
interface = 기능을 쓸때 사용자와 의사소통을 할수 있도록 알려주는 물리, 가상 장치 ex)스타유닛 오른쪽하단창에서 무브창 클릭시 이동한다. 즉, 작동방식 약속에 맞게 맞춰준다
->인터페이스만 뭔가가 달라도 일단 잘 돌아간다
c언어 콘솔개발환경은 콘솔띄워서 처리하게끔 됬고
마찬가지로 윈도우32 API 또한 창띄워서 처리하게끔 된다
windows.h 헤더를 추가해준다.
매번 MSDN를 참고하며 공부해야 함. 수천가지나 되기 때문. 그래서 자주쓰는거 말고 다른 기능들은 설명글을 빠르게 봐 습득할 수 있으면 된다.
메시지박스출력하기
Plain Text
복사
int WINAPI MassageBox(
_In_opt HWND hWnd,
_In_opt LPCTSTR lpText,
_In_opt LPCTSTR lpCaption,
In UINT uType
);
첫인자: NULL
두번째인자: 내용에 표시될 문자열
세번째인자: 캡션에 표시될 문자열
네번째인자: windows.h 헤더파일 안에 매크로 되어있는 형태들 중 하나 적어줌. ex) MB_OK를 넣으면 0x00000000L값이 넘어가게 되고 ok버튼이 뜸. MB_OKCANCEL을 넣으면 0x00000001F값이 넘어가게 되고 ok와 취소 버튼이 뜸. MB_OKCANCEL | MB_ICONSTOP 이렇게 넣어도 된다. 스탑 아이콘까지 뜨는거임
WinMain 프로젝트 생성
Plain Text
복사
apm210의 106번
Dev-C++에서 WinMain 만들기
콘솔창 뜨지 않게 프로그램 실행할려면 요거루 쓰삼
어케 그게 가능하냐? -> 이건 int main으로 main을 제공하는게 아니라 WInMain을 제공하는걸로 쓰는것이삼
인자는 C언어가 두개라면 이건 하나래요
windows.h 추가해주시구요
int CALLBACK WinMain(
In HINSTANCE hInstance,
In HINSTANCE hPrevInstance,
In LPSTR lpCmdLine,
In int nCmdShow
)
추가해줍니당
그리고 C언어 프로그램이 아니라 윈도우즈 프로그램이라는 걸 컴파일러에게 알려주어야 제대로 실행됩니다
옵션을 쓸 수도 있지만 Dev-c++에선 컴파일러 설정에서 링커탭에서 콘솔을 생성하지 않음을 체크해도 댐
->여기서 printf함수 써봤자 출력될 콘솔이 없기 때문에 어디에도 안 나타남
비쥬얼 스튜디오에서 WinMain 만들기
콘솔 응용 프로그램 선택말고 윈 프로젝트 선택하면 댐
다음다음 메뉴에서도 콘솔응용말고 윈도우즈응용으로 선택하삼
int CALLBACK WinMain(
In HINSTANCE hInstance,
In HINSTANCE hPrevInstance,
In LPSTR lpCmdLine,
In int nCmdShow
)
추가해주면 끝입니당
->글자 깨지는데요? 아 그건 멀티바이트랑 유니코드 모드가 있어서 그럼 이 예젠 멀티바이트라서 그럼 설정 잘해서 인코딩 잘하삼
:아니 그걸 알려주삼
->프로젝트 선택하고 오른쪽 누르고 속성 누르면 문자집합 나오자나 거서 설정하삼
:땡큐
결론 -> 링커에게 윈메인 쓴다고 알려주어야 한다는 사실
MSDN 보고 앞으로 공부해나가야 할 것
Plain Text
복사
모달 (메시지 박스 뜬 상태에서 백그라운드 윈도우 조작 불가능)
모달리스 (메시지 박스 뜬 상태에서 백그라운드 윈도우 조작 가능)
#include <windows.h>
#include <stdio.h>
int CALLBACK WinMain(
In HINSTANCE hInstance,
In HINSTANCE hPrevInstance,
In LPSTR lpCmdLine,
In int nCmdShow
)
{
char buff[256];
int r = MessageBox(NULL, "abc\nabc", "abc", MB_OKCANCEL);
sprintf(buff,"return : %d ", r);
r = MessageBox(NULL, buff, "메시지 박스 return 값", MB_OK);
}


