2010-06-25 11 views
11

Có cửa hàng một cửa để xác định loại .NET loại/thuộc tính nào để sử dụng, được cung cấp cho loại gốc không?Làm thế nào để biết loại marshall nào sử dụng P/Invoke?

Ví dụ sẽ giống như thế này:

Native Type | .NET Type 
--------------------------------------- 
    int   | Integer 
    int*   | IntPtr (or is it ref int?) 
    LPCSTR   | [MarshalAs(UnmanagedType.LPStr)]String 
    ... 

Guidelines for custom structures: 
    ... 

Ngoài ra, như một liên quan sang một bên, nơi đáng tin cậy nhất cho nhìn lên tờ khai marshalling cho Win32 chức năng là gì?

Trả lời

8

pinvoke.net là tài nguyên tuyệt vời cho chữ ký hàm win32. Nếu không, bạn thực sự phải xem xét các tệp C/C++ bao gồm để tìm ra quy ước và đối số gọi. Các cấu trúc phức tạp có một chút khó khăn hơn, nhưng cách dễ nhất thường là khai báo cấu trúc trong C# bằng cách sử dụng thuộc tính StructLayout trên nó để đảm bảo tất cả các trường đều căn chỉnh.

Tôi không biết một tài nguyên bao gồm tất cả để làm điều này (điều đó không có nghĩa là nó không tồn tại, chỉ là tôi không biết về nó) nhưng có rất nhiều thông tin trên MSDN về việc này.

+0

Điều đó trả lời cho một câu hỏi, nhưng còn câu hỏi thì sao? Lý do tôi hỏi là tôi cần phải P/Gọi một số chức năng từ dll của nhà. –

+0

Tôi chỉ trả lời các phụ tá. Vâng, ok, tôi đã chỉnh sửa câu trả lời của tôi. –

1

Một công cụ pinvoker cho Visual Studio

http://www.pinvoker.com/

Và một công cụ giúp chuyển đổi một tập không được quản lý cho các tập tin và tạo ra một dll quản lý:

http://www.paulyao.com/res/pinvoke/pinvoke.aspx

Cuối cùng, nếu bạn don Không muốn tải xuống bất kỳ công cụ nào, bạn luôn có thể tham khảo tham chiếu trực tuyến pinvoke.net cho tất cả các thư viện không được quản lý để lấy pinvoke/nguyên soái dưới dạng định nghĩa:

9

Dưới đây là một biểu đồ hiển thị các loại khác nhau: https://msdn.microsoft.com/en-us/library/ac7ay120(v=vs.100).aspx

+0

Đóng cuộc gọi giữa điều này và [Câu trả lời của Daniel] (http://stackoverflow.com/questions/3119752/p-invoke-how-to-know-which-type-to-marshall-from/3120158#3120158) –

1

Tôi thích interop assistant. Cung cấp cho nó khai báo của bạn (của chức năng hoặc loại - bạn cần loại nếu nó là một tham số cho chức năng) và nó cung cấp cho bạn VB hoặc C# mã.