윈도우 라이브러리

potatos의 이미지

코딩 하면서 쓰는 라이브러리들이 많은데
그런것들은 자기 자신이 만들어 쓰지않고
남들이 만들어놓은 (게임은 유니티, 음성은 fmod 등등..)
이런것들을 사용합니다.

저도 이런걸 만들어 보고싶은데
궁굼한점이 있습니다.
라이브러리가 사용을 쉽게하도록 모아놓은 함수의 집합체(?)인데
그러면 라이브러리들의 내부를 보면 윈도우 api함수들로 구성이 되어었는건가요?
아니면 직접 밑바닥 부터 코딩을 해주는건가요?
저도 이런 훌룡한 라이브러리를 작성하고 싶은데 어떤식으로 공부해야하고 또 어떤 언어 검색해본 바로는 c/c++이 많이 사용된다고 하는데..
조언 부탁드립니다.
c++로 gui작업을 할려고 하는데 mfc보다 더 좋은게 없을까요?ㅎㅎ

익명 사용자의 이미지

자기가 개발한 하드웨어나 아무도 손안댄 하드웨어라면(혹은 드물게 꼭지가 좀 돌아서 좋아서 매달리는 경우도 있긴 합니다) bios란 최 하단의 기계제어 기초 입출력 부분부터 자기가 일일히 그렇게 짜 나가야 합니다. 화면에 문자 하나 찍기도 비디오 메모리를 손대야 하는 일이 되서 힘들어 질수 있다 이말이죠.

그런데 요즘의 운영체제 위에서 돌아가는 경우는 특수한 일부 경우를 제외하면 모두 운영체제가 제공하는 시스템콜을 사용해야만 그 운영체제 위에서 프로그램이 동작할수 있습니다. 하드웨어에 대한 직접 접근을 원천적으로 차단하는게 원칙이니까요.
결국 윈도라면 통상적인 수준에선 제일 밑단이라 하더라도 winapi를 써서 라이브러리든 프로그램이든 동작한단 말입니다.

c++로 gui작업 하는건 경험상 qt하고 c++빌더를 통한 vcl의 사용 이외엔 그 어떤 것도 결코 편하지 않았습니다. 사실 wpf같은 걸로 xmal코드만 조금 주물럭 거려도 mfc로 만든 일반적인 수준은 나오는게 보통이라...

potatos의 이미지

이런말 하기 좀 그렇지만
c#은 너무 간단하고 뚝딱 만들어저서 고급(?)스럽다는 느낌이 없는데
c#도 시스템쪽을 건들수있나요?

DarkSide의 이미지

C에서 할 수 있는 일은 C#, 자바, 파이선으로 다 할 수 있습니다.

potatos의 이미지

빠른 답변 감사합니다..

potatos의 이미지

그렇다면 윗분이 말한 c#으로도 하드웨어 밑단부터 라이브러리작업이 가능한가요?

익명 사용자의 이미지

억지로 라면 못할것도 없습니다. 문젠 그게 c+어셈블리와 뭐가 다른 언어냔 것이고
이런 제약은 c++에도 동일하게 적용됩니다.
그레서 아예 바닥까지 내려가버리면 아무도 c++을 사용하지 않습니다.
이거저거 다 때내고 나면 남는건 어셈블리와 c 부분 뿐이니까요.

심지어 c조차도 경우에 따라선 어셈블리와 별반 차이가 없는 상황까지 내려가기도 합니다.
딴때 goto쓰는게 아니라 이럴때 goto를 쓰는거죠

potatos의 이미지

감사합니다..
그럼 그런걸 공부하려면 디바이스와 os등 필요한 지식들이...

potatos의 이미지

그럼 fmod나 유니티같은 좋은 라이브러리도
api를 사용한다는거네요..
좀 놀랍습니다..ㅎㅎ;;

익명 사용자의 이미지

그런 하드웨어의 기능에 밀접한 라이브러리의 경우 앞서 언급한 특수한 경우에 해당합니다.

potatos의 이미지

허..역시 쉬운게없군요..
c# 과 c++로 만든 라이브러리가 특별히 차이가 나거나 그러지는 않나요?
평소에 c#으로 프로그래밍을해서 계속 c#을하려고하는데요.

klyx의 이미지

다른 사람에게 공개할 라이브러리는 구현도 중요하지만 인터페이스, 즉 API도 중요합니다.
혼자저 자주 쓰는 걸 모아놓고 혼자 쓸 라이브러리라면 별로 상관없겠지만, 보통은 API가 좋은 라이브러리가 좋은 라이브러리라는 인상을 줍니다.
C#으로 구현을 하던 뭐로 구현을 하던, 외부로 공개되는 API 부분이 무엇이냐가 중요하겠죠.
이부분이 C#이라면 (특별히 wrapper를 제공하지 않는다면) C#을 쓰는 사람을 위한 라이브러리가 될 것입니다.
많은 라이브러리가 C++도 아니고 C로 쓰여있는 이유는, 사실상 대부분의 언어가 어떤 형태로든 C의 함수를 호출할 수 있기때문입니다.

potatos의 이미지

답글을 지금 확인했네요.
감사합니다~

아 그러면 리눅스에서 사운드 작업을 할때는 커널을 참조해서 라이브러리를 만들어야하나요??
혹시 리눅스 사운드관련 자료 있으시면 알려주시면 감사하겠습니다.

klyx의 이미지

커널을 통한 사운드작업이라는 걸로 미루어서 소리 입출력을 어떻게 하느냐는 질문으로 생각하겠습니다.
보통은 커널보다 더 추상화된 윗 단계에서 작업합니다.
사운드 관련 기능을 다루기 위한 라이브러리가 이미 존재하고, 그걸 가져다 쓰지요.
리눅스라면 ALSA, PulseAudio등이 많이 쓰이며, OpenAL도 많이쓰입니다.
참고로 OpenAL은 크로스플랫폼 라이브러리이므로 적당히 구현된 라이브러리만 찾을 수 있다면 윈도우나 맥에서도 쓸 수 있습니다.
또는 이것들에 대한 wrapper-library도 존재합니다.

potatos의 이미지

네 그런 라이브러리들을 직접 제작해보는게 저의 목표중 하나인데요..
지금 리눅스 커널 사운드 관련찾아보고있습니다.
말씀해주신 라이브러리처럼 깔끔하게 만드는건 힘들겠지만
비슷하게 소리를 출력이라도 해볼려면 리눅스 커널 사운드 관련을 찾아보고있는데 경로를 잘 찾은건가요?ㅎㅎ;

klyx의 이미지

맞을겁니다.
ALSA나 OSS(Open Sound System)같은 가장 낮은 단계의 사운드 라이브러리의 소스 코드를 참고하시면 도움될 듯합니다.

potatos의 이미지

감사합니다~~

potatos의 이미지

아 그런데 찾아보니 oss나 alsa는 리눅스 커널에있는 드라이버라고하는데
윗분이 말씀해주신 이 낮은단계인 드라이버로부터 라이브러리를 제작하는건가요?
아니면 이건 누가만들어놓은 라이브러리에불과한가요?

댓글 달기

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