2010-01-31 22 views
7

Microsoft có một trình bao bọc Windows API rất đẹp bao gồm trong khuôn khổ .NET. Nó được lưu trữ trong Microsoft.Win32.UnsafeNativeMethods, Microsoft.Win32.SafeNativeMethodsMicrosoft.Win32.NativeMethods .Unfortunately họ không thể truy cập bởi vì chúng được khai báo là tư nhân. Có cách tiếp cận dễ dàng không?Truy cập Microsoft.Win32.UnsafeNativeMethods?

Trả lời

2

Hầu hết các định nghĩa phương thức trong các lớp đó (nếu không phải tất cả) là khai báo extern với thuộc tính DllImport tham chiếu đến các hàm trong API Windows thông qua P/Invoke. Không quan trọng nơi những tờ khai này cư trú. Bạn có thể tạo lớp của riêng bạn có tên là UnsafeNativeMethods hoặc SafeNativeMethods và đặt các khai báo đề cập đến cùng một hàm API của Windows trong đó. Bạn sẽ tìm thấy chữ ký của nhiều hàm API Windows cho C# trên pinvoke.net.

+0

Điều đó cần độ tuổi. Tôi muốn có quyền truy cập vào tất cả các chức năng trong một lớp. –

+0

Như @SLaks đã viết, nhiều hàm API đã được hiển thị dưới dạng các lớp được quản lý trong Khuôn khổ .NET, ví dụ: truy cập đăng ký, cửa sổ, GDI. Thường không mất nhiều thời gian để sao chép một vài chữ ký phương thức từ một trang web vào một tệp C#. Nếu bạn đang phụ thuộc nhiều vào Windows API và không sử dụng .NET Framework, tại sao không sử dụng một ngôn ngữ lập trình thích hợp hơn? – dtb

+1

Tạo giao diện người dùng đẹp mắt trong C++ là một cơn đau đầu. (IMHO) –

1

Hầu hết các chức năng có trong các lớp này được hiển thị bởi chính khuôn khổ .Net; bạn nên tìm kiếm (hoặc hỏi ở đây) trước khi thực hiện cuộc gọi API.

Để trả lời câu hỏi của bạn, không.
Điều tốt nhất bạn có thể làm là sao chép chúng từ Reflector hoặc nguồn tham chiếu.

+1

Bạn đang đề xuất vi phạm bản quyền? – dtb

+0

Nó không phải là vi phạm bản quyền khi chỉ có một cách chính xác để làm điều đó. – Josh

+1

@Nick Brooks: "Nguồn mở" là một thuật ngữ được xác định rõ. Và nó không áp dụng cho giấy phép để xem mã nguồn cho mục đích cá nhân hoặc học tập (theo đó nguồn tham chiếu được cấp phép). – dtb

1

Đối với những gì nó có giá trị tôi luôn luôn nghĩ rằng nên có được một kernel32.interop.dll vv với các phương pháp tĩnh đã DllImport'ed. Nhưng tôi đã sử dụng để tạo của riêng mình trên cơ sở cần thiết. Trong những năm qua tôi đã tìm thấy tôi hiếm khi sử dụng nhiều hơn một số ít trong số họ, nhưng nó là một nỗi đau trong ass khi tôi cần một API mà tôi chưa nhập khẩu được nêu ra.