그것은 여전히 감각을 배우고 낮은 수준 WinAPI 프로그래밍이 가능한가요?[마감]

StackOverflow https://stackoverflow.com/questions/5507

  •  08-06-2019
  •  | 
  •  

문제

그것은 의미를 갖는 모든 C#관리-행복하시겠 Petzold 의 프로그래밍 Windows 생산하려고 코드 w/순수한 WinAPI?

무엇을 할 수 있는 배에서 그것은?그렇지만 너무 오래된 것이 유용한가?

도움이 되었습니까?

해결책

이 질문에 경계 종교:)하지만 나는 나의 생각을 어쨌든.

나는 가치를 참조하십시오 learing Win32API.대부분의하지 않는 경우,모든,GUI 라이브러리(관리하거나 관리하지 않)결과에서 호출을 Win32API 를 사용합니다.심지어 가장 철저한 라이브러리를 커버하지 않는 100%API,따라서 항상 격차는 연결될 필요가에 의해 직접적인 API 또는 P/호출.는 이름의 일부 의 래퍼 API 를 호출해야와 비슷한 이름을 근본적인 API 를 호출하지만,이름 하지 정확히 자기 문서화.그래서 이해를 근본적인 API 를 사용하는 용어 그 안에서,이해에 도움이 됩니다 래퍼 Api 과 그들이 실제로는 않습니다.

Plus,을 이해하는 경우 자연의 근본적인 Api 를 사용되는 프레임워크에 의해,당신은 더 나은 선택과 관련하여는 라이브러리 기능을 사용해야 합니다 주어진 시나리오에서.

Cheers!

다른 팁

나 유지하는 표준 C/C++년 동안 학습하기 전에 Win32API 하며,매우 무뚝뚝한,"학습 Win32API"부분은 최고의 기술적 경험의 내 인생이다.

한 손에 Win32API 이 아주 멋지다.그것은 확 C 표준(API 필요 fopen 할 수 있을 때 CreateFile.하지만 난 UNIX/Linux/WhateverOS 동일한 장치 기능이 있다.어쨌든,에서 Unix/Linux,그들은"모든 것이 파일".Windows 에서 그들은"모든 것은...창"(no 농담이 아니에요!보 CreateWindow!).

에서 다른 한편으로는,이것은 레거시 API 를 사용합니다.당신이 다루는 것 raw C,raw C 니다.

  • 처럼 말하는 하나의 구조 그것의 자신의 크기를 통해 전달 void * 포인터를 일부 Win32 기능입니다.
  • 메시징은 혼동을 일으킬 수 있습도혼합 C++개체 Win32windows 지도를 매우 흥미로운 사례의 닭이나 달걀 문제(재미있는 순간을 작성할 때 종류의 delete this ; 클래스에서는 방법).
  • 는 하위 클래스 WinProc 면 더 잘 알고체 상속가 머리 분할 및 최적입니다.
  • 그리고 물론,가의 기쁨"왜 이 fracking 세계는 그들이 일 이 방법은??"순간을 공격 할 때 당신의 키보드와 당신의 머리를 한 번은 너무 많은 그리고 집에 돌아와 키에 새겨진 이마,단지 때문에 누군가가 생각은 그것이 더 많은 논리적 작성하는 API 를 사용하여 변화의 컬러의"창에서",지 않을 변경하여 하나의 속성,그러나 요청에 의해 그의 부모를 창입니다.
  • etc.

지난 손(세 손???),고려하는 어떤 사람들은 작업으로 기존 Api 는 자신을 사용하여 레거시 코드 스타일입니다.이 순간에"당신이 듣고const 은 인형"또는"나는 사용하지 않는 네임스페이스하기 때문에 그들은 감소하는 런타임 속도"거나,더 나은"헤이 필요 C++?내가 코드에서는 나 자체 브랜드는 객체 지향 C!!!"음(장난...전문적인 환경에서,그 결과는 매우 광경을...),당신은 종류의 공만 비난에서 느끼는 앞의 단두대.

그래서...모두 모두,그것은 흥미로운 경험이다.

편집

후에 다시 읽고 이 게시물에,나는 그것을 참조할 수 있을 것으로 보이 지나치게 부정적이다.그렇지 않습니다.

그것은 때로는 흥미로운(뿐만 아니라 실망)는 방법을 알고 있는 것에서 작동합니다.당신은 이해는에도 불구하고,막대한(불가능한가?) 제약,Win32API 팀았다 훌륭한 일을해야에서 모든 것을"올 Win16 프로그램으로"당신"마지막 Win64over-the-top 응용 프로그램",함께 일할 수 있는,과거에는,이제,그리고 미래입니다.

질문입니다:당신이 정말로 원하는가?

지출하기 때문에 주는 일을 할 수 있(은)다 더 높은 수준 및/또는 객체 지향 API 수 있는 아주 드기(실제 경험:3 주가 승리를 위해 API,에 대하여 4 시간 동안에는 세 명의 다른 언어 및/또는 라이브러리)입니다.

어쨌든,당신은 레이몬드 첸의 블로그는 매우 흥미있기 때문에 그 정보는 이 사이트 모두에서 승리 API 고 그것의 진화를 통해 년:

https://blogs.msdn.microsoft.com/oldnewthing/

물론입니다.할 때 아무도 알고있는 낮은 수준,는 것입 업데이트 및 쓰기에 높은 수준 언어로 사용할 수 있습니까?또한,을 이해할 경우 낮은 수준에 물건을 작성할 수 있습니다 더 효율적인 코드에서는 더 높은 수준의 언어,또한 디버깅을 더 효율적으로 합니다.

Native Api 은"진짜"운영 체제를 일으킬 수 있습니다.니다.NET 라이브러리(몇 가지 예외를 제외하고)아무것도보다 더 많은 멋진 래퍼니다.그래서 그래,내가 말하는 사람을 이해할 수 있습니다.물의 모든 복잡성을 이해할 수 있는 비교적 평범한 것 같이 말하는 API 없이 이익의 중 사람이다.

그냥을 하려고 DLL 주입되는 코드를 생성할 수 있습니다.그것은 할 수 없습니다.당신이 강제로 작성한 기본 코드에 대한 이해 윈도우 바뀌는,실제 현 하위 클래스고,다른 것들입니다.

그래서 그렇습니다:당신이 해야 합니다(합)모두 알고 있어.

편집:는 경우에도 당신은 계획을 사용 P/Invoke.

가정에서는 응용 프로그램 구축을 대상으로 윈도우:

  • 그것은할 수 있는지 확인에게 유익이 될 이해하고 낮은 수준의 시스템이 어떻게 작동하는 방법,코드 그들과 상호 작용하는 경우(간접적으로만),그리고 당신은 추가 옵션에서 사용할 수 없는 높은 추상화 수준
  • 이있을 때 시간이 당신의 코드가 되지 않을 수도 있습으로 효율적이고,높은 성능이나 정확한 요구 사항을 충분히
  • 그러나 점점 더 많은 경우에,사람들은 우리처럼(지 배웠다"는 관리되지 않는 코딩")할 수 있을 끌어내는 프로그래밍을 하려고 없이"학습"Win32.
  • 또한,많은 사이트를 제공하는 작업 샘플 코드를 조각하고 심지어 완전한 기능의 소스 코드는"수용"(빌려,표절-그러나 있는지 확인을 준수할 다시 사용권 또는 저작권!) 을 모두 입력하는 간격지에 의해 처리됩니다.NET framework 클래스 라이브러리(또는할 수 있는 라이브러리의 다운로드하거나 라이선스).
  • 만약 당신이 할 수 있는 업적 당신은 필요 없이 장난 Win32 에서,당신은 좋은 일을 개발의 잘 형성되고,읽을 수 있 관리 코드,그 말을 마스터.NET 것보다 더 나은 선택이 확산되 자신을 얇은 두 개의 매우 다양한 환경에 적합합니다.
  • 만약 당신이 자주 필요를 활용하여 그들의 특징 Windows 는 받지 않은 좋은 프레임 워크 클래스 라이브러리의 범위에,그 모든 수단에 의해한 기술을 배울 필요합니다.
  • 나 개인적으로 소요 너무 많은 시간에 대해 걱정하"다른 영역"의 코딩을 해요 이해하기를 생산하는"좋은 프로그램"이지만,많은 매저 키스트 밖에서 사람들의 필요와 욕망은 다음과 같다.불행을 사랑하는 회사입니다.:)

가정에는 당신이에 대한 응용 프로그램 구축"Web2.0"세계는 것이 유용/익*NIX&MacOS 사용:

  • 지팡이와 언어와 컴파일러를 대상으로 많은 크로스-플랫폼은 환경으로 가능합니다.
  • 순수합니다.NET Visual Studio 에서 보다 더 Win32 명백하게,하지만 개발에 대해 모노 라이브러리는,아마도를 사용하여 날카로운 개발 IDE 은 아마 더 나은 방법.
  • 당신은 또한 당신의 시간을 보내고 학습 Java,그리고 그 능력을 전송하는 것이라 아주 잘하는 C#프로그래밍(plus Java 코드를 이론적으로 모든 플랫폼에서 실행과 일치하는 JRE).나는 그것을 들었다고 말했 Java 더 좋아요"write once,디버그 모든 곳",하지만 그것은 아마로 진실로(또는 아이템에는 결제가 요구보다)C#.

비유:당신은 생계를 위해 자동차를 구축(프로그래밍),다음의 매우 적절한 방법을 알고 엔진을 작동(Win32).

간단한 응답,그렇습니다.

이것은 모든 질문에 답변하는 것이다. "그 배우 낮은 수준 언어/api X 도할 때 높은 수준 언어/api Y 있"

부팅할 수 있 Windows PC(또는 다른 OS)및 이 질문에 그렇기 때문에 사람의 몇 Microsoft 쓴 16 비트 어셈블리 코드를 사용을 로드하는 OS.

귀하의 브라우저에 작동하기 때문에 누군가가 쓴 OS kernel C 에서 제공하는 모든 브라우저의 요청이 있습니다.

그것은 모든 스크립트 언어입니다.

크거나 작은 항상있다,시장 기회를 쓰세요 모든 수준의 추상화입니다.당신이 그것을 좋아해야와 맞는 올바른 작업입니다.

아 api/언어에서 추상화 수준은 irrelevent 이 없으면 하나 더 경쟁에서 동일한 수준.

또 다른 방법을 찾고 그것:좋은 예를 들어 중 하나에서 마이클 Abrash 의 책:C 프로그래머는 임무가 주어졌의 쓰기 기능 화면을 취소합니다.이후 C 더 나은(높은 레벨)추상 통해 어셈블리하고 모든 프로그래머만 알고 있었 C 고 그것을 알고 있었습니다.그는 자신의 최고 그는 이동 커서를 각각의 위치를 화면에 지워지는 캐릭터가있다.그는 최적화된 루프로로 달려갔습니다 그것은 할 수 있었다.하지만 여전히 어린...을 때까지 어떤 남자가 와서 그가 말했던 일부 BIOS/VGA 명령 또는 무언가할 수 있는 화면을 취소합니다.

그것은 항상하는 데 도움이 무엇을 걷고 있다.

Yes,에 대한 몇 가지 이유가:

1)입니다.net 랩 Win32 코드입니다..net 은 일반적으로 우수한 시스템에 대해 코드,하지만 몇 가지 지식의 근본적인 Win32 층(oops,WinAPI 지금 있는 64 비트 코드를 너무)을 보강한 지식의 것은 정말 일어나고 있다.

2)이제,그것은 더 나은 어떤 장점을 때 다른 사람이 너를 찾을 수 있습니다.일부 WinAPI 경험을 제공할 수 있습니다.

3)어떤 시스템 측면을 통해 사용할 수 없습니다.net framework 아직 및 액세스하려는 경우 이러한 기능을 사용해야 합 p/invoke(참조하십시오 http://www.pinvoke.net 에 대한 도움이있다).적어도의 겉 핥기 WinAPI 경험을 만들 것입니다 당신의 p/invoke 개발 노력을 많이 더 효율적입니다.

4)(추가)지금 그 Win8 는 주변에 잠시,그것은 아직도 의 상단에 내장 WinAPI.iOS,Android,OS X,and Linux 은 모두가 있지만,WinAPI 것입니다 여전히 수가 많습니다.

새로운 프로그래밍 언어를 배우 또는 기술 중 하나에 대한 세 가지 이유:
1.요:당신이 시작하는 프로젝트를 위한 웹 응용 프로그램을 구축하고 당신에 대해 아무것도 몰라 ASP.NET
2.열정:당신에 대해 매우 기쁘게 생각 ASP.NET MVC.하지 이유는?
3.무료 시간:그러나 누가는 어쨌든.

가장 좋은 이유를 배우고 새로운 무언가가 필요합니다.필요하신 경우에는 뭔가를 받은 것입니다.NET framework 할 수 없다(같은 성능에 대한 예)그 WinAPI 솔루션입니다.그때까지 우리가 해결할 바쁜 학습니다.NET

대부분의 요구에 바탕 화면 당신은 늘 알 필요가 Win32,그러나 많은 Win32 하지 않습니다.순 있지만,그것은에서 outlaying 재료할 수 있는 끝나의 1%미만 응용 프로그램입니다.

USB 를 지원,숨겨지원,윈도우 미디어 재단의 상단의 머리입니다.많은 멋진 Vista API 에서만 사용할 수 있 Win32.

당신은 자신에게 큰 찬성에 의해 수행하는 방법을 학습 interop Win32API,당신이 할 경우 데스크톱 프로그래밍기 때문에,가 필요한 경우 전화를 Win32,그리고 당신은 것입니다,오늘 당신은 우리의 친구가 될 것이며 주니다.

개인적으로 나는 진짜로 좋아하지 않는다 Win32API 하지만 거기에서 값을 학습으로는 API 를 허용한다는 것을 제어 및 효율성 GUI 를 사용하여 이상의 언어 같은 기본,그리고 내가 믿는 경우에 당신의 살아있는 소프트웨어 알고 있어야 합 API 도를 사용하지 않는 경우에는 그 모습을 볼 수 있습니다.이것은 이유는 유사하는 이유에 대해 배울 수 있는 좋은 기 C,어떻게 같이 strcpy 보다 더 많은 시간이 필요 복사 정수,또는 왜 당신이 사용해야 하는 포인터 배열로 기능 매개 변수는 대신 배열에 의한 값입니다.

학습 C 또는 낮은 수준 언어할 수 있는 확실히 유용합니다.그러나,보이지 않는데 명백한 이점은 사용하여 관리되지 않는 WinAPI.

나는 본 적이 낮은 수준이 Windows API 코드...그것은 없다.나는 잊습니다.난 그것은 혜택을 배우 낮은 수준으로는 C,을 얻을 당신의 더 나은 이해를 하드웨어 아키텍처와 어떻게 모든 물건을 작동합니다.배우 오래된 Windows API...나는 생각할 수 있습 왼쪽에서 사람들이 마이크로소프트 배울 필요가 있을 수도 있을 구축하는 높은 수준 언어 및 API...그들은 그것을 구축,그들이 겪는다;-)

그러나,당신이 일어난 상황을 찾기 위해 어디에 당신이 느낄 수 없다 그냥 무엇을 해야 할 높은 수준 언어(멀리 사이 몇몇),그는 아마 시작하는 위험한 다이빙으로는 세계입니다.

그렇습니다.을 살펴 uTorrent,소프트웨어의 놀라운 작품이 효율입니다.그것의 절반 작은 크기는 사실로 인해 많은 그것의 핵심 구성 요소를 다시 작성하는 사용하지 gargatuian 라이브러리입니다.

많이 할 수 없는 방법을 이해하지 않고 이러한 라이브러리와의 인터페이스의 더 낮은 수준의 API

그것은 알고 무엇보다 중요한 사용할 수 있 Windows API 를 사용합니다.나는 할 필요가 있다고 생각하지 않습을 크랭크 코드 그것으로,하지만 당신은 어떻게 작동하는지 알 수 있습니다.니다.NET Framework 이 많이 포함되어 기능을 제공하지 않 관리 코드에 해당하는 전체적입니다.때때로 당신은 당신을 조금 더 가까이 얻을 금속,그리고 무엇을 알고 있고 그것이 어떻게 동작하는 것입니다 당신의 더 나은 이해하는 방법을 사용합니다.

이것은 정말과 같은 질문해야,나는 배우 낮은 수준의 언어 같은 C(또는 어셈블러).

코딩에서 그것은 확실히 느린(하지만 물론 결과가 훨씬 더 빠르게)하지만,그것의 진정한 장점은 당신에 대한 통찰력을 얻을 수에서 무슨 일이 일어나고 있는지에 근접하는 시스템 레벨 보다는 오히려 이상 단지 이해 누군가가 다른 사람에 대한 은유는 무엇입니다.

그것은 또한 더 나은 일을 할 때 잘 작동하지 않습니,또는 충분히 빠르게 또는 종류의 단위는 당신이 필요합니다.(그리고 적어도 일부 서브 클래스고 superclassing.)

난 그것은이 방법을 넣어.내가 좋아하지 않 프로그래밍을 Win32API 를 사용합니다.그것은 고통이 될 수 있습에 비교되는 코드를 생성할 수 있습니다.하지만,나는 알기 때문에 나는 그것을 쓸 수 있는 프로그램으면 못할 수 있습니다.내가 쓸 수 있는 프로그램을 다른 사람들도 있습니다.플러스 더 많은 통찰력을 제공 무엇으로 관리되는 코드고 있습니다.

양의 값이 당신의 학습 Win32API,(고객께서는 종류의 일반적인 통찰력에서 얻을 수 있는 방법에 대해 학습 볼트와 너트의 기계에 맞게)함께 작업에 따라 달라집니다.많은 Win32API 멋지게 포장되었습니다.NET 클래스 라이브러리,하지만 아닙니다.는 경우 예를 들어 당신을 찾고 어떤 심각한 오디오 프로그래밍,는 부분의 Win32API 것한 우수한 연구의 대상이기 때문에 대부분의 기본 동작을 사용할 수 있습니다.NET 클래스입니다.마지막으로 내가 확인차 다이렉트 관리 DirectSound 라이브러리이었습니다.


에서의 위험을 뻔뻔한 자기진....

나는 그냥 상황에 걸쳐 Win32API 었고 나만이 유일한 선택입니다.하고 싶은 다른 도구 설명을 각 항목에 대 listbox.내가 쓴 얼마나 내가 그것에 이 질문.

에서도 매우 높은 수준 언어로 당신은 여전히 사용하의 API 를 사용합니다.왜?지의 모든 측면 API 복제되었으로 다양한 라이브러리,프레임워크,etc.를 배워야 합 API 는 만큼 해야 합 API 있는 것과 달성하고자 노력하고 있습니다.(고 더 이상 없습니다.)

그 외에도에서 아주 특별한 경우에 직접 액세스할 수 있어야 합니다 APIs,나는 것이 아니라고 말합니다.

가 상당한 시간과 노력이 필요하를 구현하는 방법을 확인하십시오어 API 를 통화를 정확하고 반환 값은 단지 가치가있다.오히려 보내는 시간을 배우는 몇몇 새로운 기술 또는 프레임워크는 것입니다 당신의 인생을 더 쉽게 만들고 프로그래밍을 일으키고 있습니다.지 않을 수십 년 동안 세 폐 COM 라이브러리는 아무도 정말 사용하여 더 이상(미 COM users).

십시오지 않는 돌이 저를 보기입니다.나는 많이 알고의 엔지니어들은 여기에는 정말 호기심을 영혼을 아무 잘못이 없는 방법을 학습합니다.호기심이 좋고 정말 이해를하는 데 도움이됩니다.그러나 경영의 관점,나는 것이 오히려 일주일을 보내는 방법을 학습 안드로이드 애플리케이션을 개발할 것보다 어떻게 전화를 OLEs 나씩 있습니다.

는 경우에 당신은 계획을 개발하는 크로스 플랫폼의 응용 프로그램을 사용하는 경우,win32 응용 프로그램에서 다음을 쉽게 할 수은 리눅스에서 실행을 통해 와인입니다.이 결과를 높게 유지 보수 응용 프로그램.이것은 하나의 학습의 장점 win32.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top