2009-08-21 45 views
6

Tôi đang viết một thư viện sử dụng một vài hàm từ thư viện user32.dll của windows, nhưng tôi đang biên dịch nó với Mono để xem giá vé trên OS X. Thật không may là nó không thể tìm thấy thư viện user32.dll vì lý do rõ ràng.Tương đương với user32.dll trên OS X

Nhưng câu hỏi của tôi là ... có thư viện tương tự trên OS X mà tôi có thể sử dụng không? Tôi đặc biệt tìm kiếm các chức năng sau đây.

[DllImport("user32.dll")] 
static extern IntPtr GetForegroundWindow(); 

[DllImport("user32.dll")] 
static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId); 

[DllImport("user32.dll")] 
static extern int GetWindowText(IntPtr hWnd, StringBuilder text, int count); 

[DllImport("user32.dll")] 
static extern bool GetLastInputInfo(ref LASTINPUTINFO plii); 

Tôi nghĩ rằng việc cài đặt WINE sẽ hữu ích, nhưng tôi muốn tránh điều đó nếu có thể. Sử dụng trình bao bọc win32 của Ruby cũng là một lựa chọn?

+1

Mô hình cửa sổ hoàn toàn khác biệt - bạn không thể sử dụng các cuộc gọi Mono thuần túy cho điều này? Nếu không, bạn sẽ phải xem một trong các thư viện Cocoa/Mono – Mark

Trả lời

5

Từ the Mono website:

Nếu bạn đang gọi cái gì mà được cung cấp bởi nền tảng của bạn (thường là API win32), bạn sẽ phải tìm một cách để thực hiện các chức năng tương tự trên tất cả các nền tảng mục tiêu của bạn. Điều này có nghĩa là thay thế cuộc gọi không được quản lý của bạn bằng một tương đương được quản lý, hoặc nó có thể có nghĩa là phát hiện bạn đang chạy nền tảng nào và gọi Win32/* nix/OSX/etc. tương đương.

(http://pinvoke.net đôi khi có thể giúp bạn tìm được tương đương quản lý các cuộc gọi Win32 API.)

Nếu bạn đang gọi vào thư viện bản địa của riêng bạn, sau đó nó phụ thuộc vào khả năng cross-platform của thư viện của bạn. Nếu thư viện gốc của bạn sẽ hoạt động trên tất cả các nền tảng đích của bạn, thì ứng dụng của bạn sẽ ổn. Nếu không, bạn có thể làm cho nền tảng thư viện gốc của bạn tương thích, thực hiện thao tác trong mã được quản lý hoặc làm việc xung quanh nó bằng cách phát hiện bạn đang chạy nền tảng nào.

Và chúng cũng liên kết đến một trang trên Interop with Native Libraries.

Nhìn qua pinvoke, một kết quả là GetForegroundWindow tài liệu tham khảo mwinapi - ở cái nhìn đầu tiên, trông không có vẻ di động, vì vậy bạn có thể không may mắn khi tìm giải pháp được quản lý.

1

Có thể không có ánh xạ trực tiếp. Trong OS X có tồn tại một số môi trường Cocoa/Carbon/Java/X11 và mỗi môi trường có các API riêng của nó. Ca cao và Java là các API hướng đối tượng trong khi Carbon và X11 dựa trên các hàm. Apple khuyến cáo sử dụng Cocoa cho ứng dụng mới. Bạn phải khởi tạo các đối tượng Cocoa và gói gọn truy cập thông qua lời gọi hàm của bạn.

Các vấn đề liên quan