2010-01-31 7 views
7

Microsoft는 .NET Framework에 포함 된 아주 멋진 Windows API 래퍼를 가지고 있습니다. 그들이 비공개로 선언되기 때문에 .Unfortunately가 액세스 할 수없는 Microsoft.Win32.UnsafeNativeMethods, Microsoft.Win32.SafeNativeMethodsMicrosoft.Win32.NativeMethods에 저장됩니다. 쉽게 액세스 할 수 있습니까?Microsoft.Win32.UnsafeNativeMethods에 액세스 하시겠습니까?

답변

2

이러한 클래스의 대부분의 메서드 정의 (모두가 아닐 경우)는 Windows API의 P/Invoke를 통해 함수를 참조하는 DllImport 특성이있는 extern 속성의 선언입니다. In은 이러한 선언이 어디에 상주하는지는 중요하지 않습니다. UnsafeNativeMethods 또는 SafeNativeMethods라는 자체 클래스를 만들고 여기에 같은 Windows API 함수를 참조하는 선언을 넣을 수 있습니다. pinvoke.net에 C# 용 많은 Windows API 함수의 서명이 있습니다.

+0

이것은 시간이 오래 걸립니다. 한 클래스의 모든 함수에 액세스 할 수 있습니다. –

+0

@SLaks가 쓴 것처럼 많은 API 함수는 이미 .NET Framework의 관리되는 클래스 (예 : 레지스트리 액세스, 창, GDI)로 제공됩니다. 보통 웹 사이트에서 몇 가지 메서드 서명을 C# 파일로 복사하는 데 너무 오래 걸리지 않습니다. Windows API에 많이 의존하고 .NET Framework를 사용하지 않는 경우보다 적절한 프로그래밍 언어를 사용하십시오. – dtb

+1

C++에서 멋진 UI를 만드는 것은 어려움입니다. (IMHO) –

1

이러한 클래스에 포함 된 대부분의 기능은 .Net 프레임 워크 자체에 의해 노출됩니다. API 호출을하기 전에 검색 (또는 여기에서 요청)해야합니다.

질문에 대답하려면 다음과 같이하십시오.
최선의 방법은 리플 렉터 또는 참조 소스에서 복사하는 것입니다.

+1

저작권 위반을 권장합니까? – dtb

+0

올바른 방법이 하나만있는 경우 저작권 위반이 아닙니다. – Josh

+1

@Nick Brooks : "오픈 소스"는 잘 정의 된 용어입니다. 또한 개인 또는 학술 목적의 소스 코드 (참조 소스의 라이센스가 있음)를보기위한 라이센스에는 적용되지 않습니다. – dtb

1

나는 항상 정적 메서드가 이미 DllImport'ed있는 kernel32.interop.dll 등이 있어야한다고 생각했다. 그러나 필자는 필요할 때마다 내 것을 만들려고 노력했습니다. 수년에 걸쳐 나는 소수의 API를 거의 사용하지 않는다는 것을 알았지 만 아직 가져 오지 않은 API가 필요할 때 엉망이되었습니다.

관련 문제