2011-09-06 34 views
15

Tôi đang cố gắng chuyển một chương trình Windows sang Linux. Tôi chưa bao giờ được lập trình trong Linux và có rất ít ý tưởng về những gì tôi đang làm. Tôi đã quản lý để loại bỏ rất nhiều lỗi tôi nhận được trong trình biên dịch G ++ trên Linux và đã truy tìm hầu hết các lỗi còn lại đối với các loại biến không tồn tại.Tôi nên sử dụng gì thay vì windows.h trong linux

Tôi đã diễn ra các tập tin windows.h nhưng tôi biết biết phải làm gì với các biến CALLBACK, HANDLE, DWORDHHOOK. Rõ ràng là không có tương đương với HANDLE trong Linux vì vậy tôi nghĩ rằng tôi có thể phải viết lại một số cấu trúc.

Bất cứ ai có thể giải thích những gì tôi nên làm hoặc chỉ cho tôi một số hướng dẫn dạy tôi cách làm những điều này trong Linux?

Chương trình của tôi chạy vòng lặp bỏ phiếu trên mạng RS-485 nếu điều đó có ích.

+5

Bạn chưa nói mã của mình làm gì, vì vậy không. nó có thể làm bạn ngạc nhiên, nhưng mô tả ** tất cả ** sự khác biệt trong lập trình Windows vs Linux đòi hỏi nhiều không gian hơn là một câu trả lời SO thường chứa. Không có một phép thuật 'ConvertWindowsToLinux()'. Chúng là các hệ điều hành khác nhau với các API khác nhau. Để làm một cái gì đó bằng cách sử dụng các API Linux (POSIX, thực sự), bạn sẽ cần phải bắt đầu bằng cách xác định * những gì bạn muốn làm *. – jalf

+0

Nếu bạn muốn lập trình GUI trong Linux, chương trình này được gọi là lập trình "X" và không có liên quan gì đến Win32. –

Trả lời

19

Các typedefs mất tích (HANDLE, vv) không phải là vấn đề của bạn. Vấn đề của bạn là Linux và Windows có các API hoàn toàn khác nhau, bạn không thể đơn giản hy vọng chuyển đổi cổng này sang cổng khác bằng cách thay thế một vài định nghĩa kiểu.

Phần hoàn toàn phụ thuộc vào nền tảng của mã của bạn phải được thay thế. Bước đầu tiên của bạn là do đó để tìm hiểu các API Linux. Cách tốt nhất để làm điều này là lấy một cuốn sách về lập trình Linux.

Hơn nữa, Linux không cung cấp API mặc định để quản lý cửa sổ cũng như Windows nên nếu bạn đang lập trình một ứng dụng đồ họa thì bạn cũng cần phải chọn một thư viện cửa sổ.

1

windows.h có nghĩa là ứng dụng của bạn sử dụng API của hệ điều hành Windows, không có ánh xạ 1-1 đối với các thư viện khác trên Linux.

Bạn có thể xem xét chạy ứng dụng của mình trong Wine nếu bạn không muốn chuyển ứng dụng.

0

Linux có mô hình lập trình khá khác với Windows. Nếu bạn quan tâm đến lập trình một cổng nối tiếp (RS485 tương tự như RS232) here là một hướng dẫn sẽ cho bạn thấy những điều cơ bản.

1

Bạn có 2 tùy chọn.

  1. Nhập các loại bị thiếu của bạn vào loại phù hợp với hệ điều hành mới của bạn.
  2. Viết lại mã không sử dụng các loại đó.

Tôi nghi ngờ rằng bất kỳ ai cũng có thể cho bạn biết bạn nên làm gì với cổng mà không biết chi tiết cụ thể của từng trường hợp. Những điều về windows.h là nó dựa trên hệ điều hành windows ... bạn sẽ phải thay đổi các chức năng mà bạn đang gọi từ nó. Trong trường hợp đó, bạn sẽ không còn sử dụng các loại mà bạn không có.
Về cơ bản bạn sẽ phải hiểu API cửa sổ đang được sử dụng và tìm các chức năng tương đương cho hệ điều hành đích của bạn.

11

Không có "tương đương", do đó, để nói, đối với windows.h trong Linux, bạn cần sửa trường hợp lỗi của bạn theo từng trường hợp hoặc tốt hơn, viết lại mã của bạn cho linux (nếu nó không quá phức tạp).

Tuy nhiên, nếu chúng ta bỏ qua cửa sổ API cụ thể, bạn có thể sửa chữa typedef lỗi (DWORD, xử lý, ...):

#ifndef DWORD 
#define WINAPI 
typedef unsigned long DWORD; 
typedef short WCHAR; 
typedef void * HANDLE; 
#define MAX_PATH PATH_MAX 
typedef unsigned char BYTE; 
typedef unsigned short WORD; 
typedef unsigned int BOOL; 
#endif 

typedef source code

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