[ Win32 API ] 윈도우 생성 과정에서 "프로그램 인스턴스의 핸들" 은 왜 지정하나요 ?

naddolki의 이미지

윈도우를 생성하는 과정에서 ..

윈도우 클래스 (WNDCLASS) 의 hInstance 멤버에.. 프로그램 인스턴스의 핸들을 지정하는 것은 ..
어떤 의미가 있는 건가요 ?

아울러, CreateWindow() 의 전달 인자로도, 프로그램 인스턴스의 핸들을 전달하는데요 ..
어떤 의미가 있는 건가요 ?

혹자의 말씀에 따르면 ..

윈도우 클래스와 윈도우의 파괴 시기를 결정하기 위함이 목적이라고 하는데요 .
(즉, 프로그램 인스턴스가 파괴될 때 .. OS 는 이와 관련된 '윈도우 클래스', '윈도우' 를 ..
파괴해야 하기 때문 .. 이라고 함)

헌데, 제가 이런 테스트를 해 보았어요 .

WNDCLASS wc;
wc.hInstance = (HINSTANCE) 133 ;    // 핸들값을 대충 아무 아무렇게나 지정
 
/*
 
 중략 ..
 
*/
 
CreateWindow( ... , (HINSTANCE) 4216 , ...);     // 핸들 값을 대충 아무렇게나 지정

세 가지 컴파일러로 테스트한 결과 ..
모두 ..

정상적으로 빌드되었고, 정상적으로 실행되 되었습니다 .
또한, "작업 관리자" 를 이용해 프로그램을 종료하니까 ..
'윈도우' 도 정상적으로 파괴되었습니다 .
역으로, 윈도우를 닫아도 .. 프로그램 인스턴스가 정상적으로 파괴되었습니다 .
(물론, 윈도우 프로시저에 WM_DESTROY 메시지가 발생하면, 프로그램 인스턴스가 종료되록 코딩되어 있습니다)

아울러, '윈도우' 에 발생한 메시지도 .. 모두 윈도우 프로시저에 정상적으로 전달 되었고요 ^^ ;;;;;;;;;;;;;;;

비록, 기본적인 코드로만 테스트했지만 ..
모든 게 정상이었습니다 ;;;

윈도우 생성 과정에서 .. 윈도우 클래스의 hInstance 멤버와, CreateWindow() 의 인자로 ..
프로그램 인스턴스의 핸들을 지정해주는 이유가 무엇인지 좀 알려주셔요 ... ㅠㅠ

참고로, 핸들 값 지정에 있어 .. 정상적이지 않은 값으로 지정할 경우 ..
문제가 되는 상황은 딱 하나가 있는데요 ..

다만, 핸들값을 멋대로 지정하는 부분에 있어서 ..
예외가 딱 한 가지 있는데 .. 아래처럼 지정했을 경우에 그러합니다 .

윈도우 클래스의 hInstance 를 0 으로 지정하고,
CreateWindow() 호출 할 때는, 0이 아닌 핸들 값을 넘겼을 경우 .

이 경우 .. 빌드는 정상적으로 되지만, 실행이 안되더군요 .

긴 글 읽어주셔서 감사합니다 ^^ ;;;

bugiii의 이미지

옛날 옛적, win32 이전의 태고적에 모든 프로세스가 같은 주소 공간에 존재하던 win16 상황에서 (Windows 3.1) 필요한 값이었습니다.

이 값은 프로세스의 베이스 어드레스라고 알고 있고, 지금은 각 프로세스별로 (서로 전혀 모르는) 독립된 주소공간을 가지기 때문에, 사실상 의미없는 값입니다.

다만, 예전 코드와 호환을 위해서거나 귀찮아서거나 인자의 널 체크는 하도록 되어 있겠죠.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.