[Solved]윈도우 API 뉴비에겐 힘듬...ㅠ,.ㅠ

bookgekgom의 이미지

QT4 하고 wxWidgets 는 간단한데 라이브러리를 추가해줘야하더라구요.

라이브러리 크기가 너무 크고 말이죠...-ㅅ-

제가 자바로 프로그램짜다가 사람들이 자바 깔기 귀찮다고 해서

암것도 필요없을줄 알았던 <- 중요 뉴비의 착각

씨쁠쁠을 쓰고 있는데 말이죠.

윈도우 API 를 보았는데..이건뭐...으허헣ㅇ ㅠㅠ

QT 하고 wxWidgets 는 자바스윙이랑 비슷해서 좋은데 추가 dll 들이 자바랑 맞먹는거임...

내가 뭘 잘못하고 있는겁니까?

그래서 요즘 프로그램 윈도우 API 사용해서 짜고있는데

이건 프레임에 패널추가하고 버튼 하나만 추가 하려고해도 외울것이 너무 많고 ㅠㅠ

제가 쓰고 있는 IDE 는 code::blocks 인데요

QT 하고 wxW 는 비쥬얼 툴이 있어서 손으로 그려주면 되는데...

윈도우 API 는 그런게 없음...

ㅠ,.ㅠ

고수님들은 윈도우API 어떻게 잘쓰시나요?

---------------------------------------------------------------------------------------------------
답변 감사드립니다~

klara의 이미지

프로그램 종류에 따라서 다르지만 static 빌드하면 라이브러리를 따로 배포할 필요가 없으니 아무것도 필요없을텐데요..?
그리고 static빌드가 아니더라도, 자바처럼 설치해야 하는 것도 아니고, 윈도우는 실행파일과 라이브러리가 같은 경로에 있으면 자동으로 인식되니까, 실행파일이랑 필요한 라이브러리를 같이 배포하면 역시 아무것도 필요없구요.

Win32API에 대해서는 devpia같은데에 물어보면 더 많이 답변 받을수 있지 않을까 싶습니다.

bookgekgom의 이미지

답변 정말 감사 드립니다.

스태틱 빌드를 하면된다 그거죠?

네 윈도우 실행파일과 라이브러리가 같은 경로에 있으면 되는데

라이브러리 크기가 너무나 크더군요...

프로그램에 이것저것 넣다보니 필요한 dll 다 넣다보니까

프로그램은 정작 몇매가 인데...dll 들만 100 매가를 넘어가는 기현상이..ㅎㄷㄷ

답변정말 감사드립니다.

---------------------------------------------------------------------------------------------------------------
루비 온 레일즈로 만들고 있는 홈페이지 입니다.

http://jihwankim.co.nr

여러 프로그램 소스들이 있습니다.

필요하신분은 받아가세요.

klara의 이미지

혹시 debug용 바이너리를 배포하시는 건 아니신가요? 일반적으로 필요한 QtCore와 QtGui 두개의 라이브러리파일은, 릴리즈용이라면 합쳐서 10메가정도밖도 안됩니다. 반면에 디버그용 파일은 QtGui하나만으로도 50메가가 넘고요.
참고로 파일명 끝에 d가 붙어있는게 디버깅용 파일입니다. 일반적으로 배포할때는 릴리즈모드로 빌드하고 릴리즈용 라이브러리 파일을 첨부합니다.

coderheart의 이미지

약간 댓글 제목이 오버인가요? 그럴수도 있습니다.
대부분 게임 개발자들은 winapi 쓰니까요. 하지만 게임개발은 윈도우 프레임워크 GUI 를 사용하지 않기 때문에,
윈도우쪽 GUI 기능을 거의 안써서 winapi 쓰는 것입니다. 결코 winapi 를 많이 활용하지 않습니다.
게임 내부에서 쓰는 GUI 는 외부 그래픽 라이브러리 써서 자체 개발하거나 외부 게임용 GUI 라이브러리 사용합니다.
winapi 는 사실 서드파티 GUI 라이브러리 개발자들이 랩핑해서 쓰라고 해야 맞다고 볼 수도 있습니다.

리눅스에서 GUI 개발할 때 무엇을 쓰십니까? Qt 아니면 GTK 를 씁니다.
Windows API 를 쓰신다는 것은 리눅스에서 GUI 프로그램 개발할 때 Xlib 를 사용해서 개발하는 것과 같은 이치입니다.
제가 리눅스 쪽은 정확히 몰라서 비유가 맞는 지는 모르겠지만 ^^
여하튼, Windows 에서 GUI 개발할 때는 MFC 를 쓰는 게 낫습니다.
(하지만 MFC 는 C++ 에 대한 높은 이해를 요구합니다.)

안그렇다면, 그냥 Qt, GTK 라이브러리를 추가해서 사용하심을 권장드립니다.

본래 C/C++ 쪽 계열 언어가 Java 와 달리 중앙체에서 만든 라이브러리 따위가 매우 약소합니다.
기껏해야 c 표준 라이브러리와 STL 정도인데, 여기서는 GUI 쪽 기능을 제공하지 않습니다.

bookgekgom의 이미지

눈앞에있던 어둠이 사라지는 느낌입니다.

QT4 를 쓰면 되겠군요.

ㅇㅅㅇ 그런데 wxWidget 같은 경우에는 필요한 dll 을 추가해야 하던데...

용량이 엄청 크더군요.

QT 도 dll 을 실행파일과 같이 있어주어야 하나요?

---------------------------------------------------------------------------------------------------------------
루비 온 레일즈로 만들고 있는 홈페이지 입니다.

http://jihwankim.co.nr

여러 프로그램 소스들이 있습니다.

필요하신분은 받아가세요.

coderheart의 이미지

잘 아시는 분이 답을 다시기를 기다리시기전에,
제가 아는 범위에서 답을 해드리겠습니다.

일단, 대부분의 라이브러리는 static link, dynamic(혹은 shared) link 방식을 모두 지원합니다.
따라서 QT 도 제공될 거라 기대합니다.
(구글링 결과 자세히 들여다보지는 않았지만 맞는 것 같습니다)
하지만 dynamic link 방식만 지원하는 경우도 있습니다.

혹시 두 link 방식의 정확한 차이점에 대해서 궁금하실까봐 부연 설명드리겠습니다.
static link 는 .lib 차원에서 제공되어서, 소스와 컴파일 시
통합된 .exe 파일로 컴파일 가능합니다.
dynamic link 는 말씀하신대로 wxWidget 에서 필요한 dll 을 추가해줘야하는 방식입니다.
dll 이 dynamic link library 의 약자이기도 합니다.
dll 방식은 lib 가 컴파일 타임에 링크가 되는 것과 달리, 런타임에 링크가 됩니다.
- 물론 엄밀한 의미에서 링크는 아닙니다만, 런타임에 함수코드를 로드할 수 있음을 의미합니다 -
이런 방식으로 된 라이브러리는 .exe 파일 통합적으로 생성 못하고 별도의 dll 이 필요합니다.

둘 다 장단점이 있지만, 대개 개발자들은 .lib 방식을 선호하는 경향이 있습니다.

오픈소스인 라이브러리들은 거의 전부 .lib 방식이 지원됩니다. ( .dll 은 옵션 )
- QT 는 오픈소스가 아닌 것으로 알고 있습니다. 맞나요? 하지만 오픈소스가 아닐지라도 .lib 를 지원하는 경우가
많으니 한 번 검색해보세요 -
하지만, lib 방식이 아닐지라도 소스가 공개되었기 때문에 해당 라이브러리 소스를 포함시켜 컴파일하면
당연히 .exe 파일로 통합 링크가 되겠죠.
각 라이브러리별 .dll .lib 방식 컴파일의 구분은, 헤더파일의 매크로(#define) 설정에 의해서 선택적
컴파일이 됩니다.
- 물론 이런 매크로 설정 구분을 지원하는 대신, 아예 별도로 두 방식의 헤더를 구분한 경우도 많습니다 -
예를 들어 프로젝트 컴파일시 컴파일 옵션에 전역 #define 설정을 할 수가 있는데, -Diwantstaticlib
이런식으로 하면 iwantstaticlib 매크로가 정의되게 되고, 해당 라이브러리 헤더 파일은
그 매크로를 참고하여 선택적 컴파일을 시도하게 됩니다. (.dll, lib 방식 중 어떤 것으로 컴파일 할지)
조금 복잡해졌는데, 구글에서 QT static shared 로 검색하시면 답이 나올지도 모르겠습니다.
명쾌한 답변을 못드려 죄송합니다. 수고하세요.

bookgekgom의 이미지

정말 감사드립니다.

이 쓰레드는 답변이 끝났으니 닫아야겠군염

---------------------------------------------------------------------------------------------------------------
루비 온 레일즈로 만들고 있는 홈페이지 입니다.

http://jihwankim.co.nr

여러 프로그램 소스들이 있습니다.

필요하신분은 받아가세요.

댓글 달기

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