win32 api 작업시 파일 분리하기?

himynet의 이미지

이거 설명을 어떻게 해야 될지를 모르겠네요. Win32 Api에 관한 건데요....

보통 프로그램을 짤 때 확장성과 작업의 용의성을 생각해서 각 기능별로 파일을 분리 하지 않습니까?

근데 이 분리라는게 api를 처음 접하는 저로써는 정말 난감하네요.

어떤 기능을 모아서 a.cpp를 만들고 거기에 정의 된 펑션들을 a.h에 넣어 뒀습니다.

main.cpp에서 a.h를 인클루드해서 쓰거나 a.cpp에서 펑션들을 작성할때 메인에 정의 된 HWND 이런 핸들들이나 기타 전역 변수를 부를 때

그 많은 변수를 다 extern 할 수 도 었고 그렇다고 main.cpp에 a.cpp에서 사용될 변수들을 다 정의해 놔도 어차피 a.cpp에서 쓸려면 또 난감하네요.

도대체 api로 작업시 파일을 어떻게 분리해야 되며 전역변수나 기타 함수를 어떻게 처리해야 되는지...

한심하죠 ㅡ.ㅡ 이런거 하나 처리 못 하는 저도 깝깝하네요 ㅠ.ㅠ

제발 어떻게 해야 되는지 가르침을 부탁드립니다.

hanzo69의 이미지

저도 잘은 모르지만...

가급적 전역변수를 통해 모듈간 통신을 하는 방법 대신, 함수의 매개변수로써 받아서 처리하도록 만드시는게 좋다 생각합니다.

1. 동일한 대상을 처리하는 변수들을 그룹화시켜 구조체화시키세요.
struct CMyWnd {
HWND hWnd;
int nExtra;
};

2. 이 구조체를 a.cpp에서 선언하여 extern으로 처리하기보단..
main에서 선언한 후 a.cpp의 함수가 포인터를 받아 처리하는 함수형식으로 만들어보세요.
int DrawWnd( CMyWnd *pthis, char *pszString);

api냐 아니냐의 문제라기보단... linux에서 작업한다 해도 크게 달라지는건 없습니다.
어차피 나중에 가면.. 대부분의 헤더는 운영체제와 상관 없이 그대로 재사용이 가능합니다. 운영체제에 의존적인 개체는 캡슐화시켜 헤더에선 이름만 선언하고, cpp에서 정의를 하니까요.

그럼..

님ㅎ 즐~

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.