2011-09-06 8 views
15

में windows.h के बजाय मुझे क्या उपयोग करना चाहिए मैं लिनक्स में एक विंडोज प्रोग्राम पोर्ट करने की कोशिश कर रहा हूं। मैंने कभी लिनक्स में प्रोग्राम नहीं किया है और मुझे बहुत कम विचार है कि मैं क्या कर रहा हूं। मैंने लिनक्स पर जी ++ कंपाइलर में मिली कई त्रुटियों को खत्म करने में कामयाब रहा है और शेष बचे हुए लोगों को गैर मौजूद चर प्रकारों में ढूंढ लिया है।लिनक्स

मैं windows.h फ़ाइल बाहर ले लेकिन मुझे पता है कि CALLBACK, HANDLE, DWORD और HHOOK चर के साथ क्या करना जानते हैं। स्पष्ट रूप से लिनक्स में HANDLE के बराबर नहीं है, इसलिए मुझे लगता है कि मुझे कुछ संरचना को फिर से लिखना पड़ सकता है।

क्या कोई मुझे बता सकता है कि मुझे क्या करना चाहिए या मुझे कुछ ट्यूटोरियल में इंगित करें जो मुझे सिखाता है कि इन चीजों को लिनक्स में कैसे करना है?

मेरा प्रोग्राम आरएस -485 नेटवर्क पर एक मतदान लूप चलाता है अगर इससे मदद मिलती है।

+5

आपने यह नहीं कहा है कि आपका कोड क्या करता है, इसलिए नहीं। यह आपको आश्चर्यचकित कर सकता है, लेकिन ** ** ** प्रोग्रामिंग में भिन्नता विंडोज़ बनाम लिनक्स में एक एसओ उत्तर की तुलना में अधिक जगह की आवश्यकता होती है। एक जादुई 'कन्वर्टविंडोज़ टोलिनक्स()' फ़ंक्शन नहीं है। वे विभिन्न एपीआई के साथ अलग ओएस हैं। लिनक्स एपीआई (पॉज़िक्स, वास्तव में) का उपयोग करके कुछ करने के लिए, आपको * आप जो करना चाहते हैं उसे परिभाषित करके शुरू करना होगा। – jalf

+0

यदि आप लिनक्स में जीयूआई प्रोग्रामिंग चाहते हैं, तो इसे "एक्स" प्रोग्रामिंग कहा जाता है, और यह कहीं भी Win32 से संबंधित नहीं है। –

उत्तर

19

लापता typedefs (HANDLE आदि) आपकी समस्या नहीं है। आपकी समस्या यह है कि लिनक्स और विंडोज़ में पूरी तरह से अलग-अलग एपीआई हैं, आप बस कुछ प्रकार की परिभाषाओं को बदलकर दूसरे को पोर्ट करने की उम्मीद नहीं कर सकते हैं।

आपके कोड का पूरा प्लेटफॉर्म-निर्भर भाग बदलना होगा। इसलिए आपका पहला कदम लिनक्स एपीआई सीखना है। ऐसा करने का सबसे अच्छा तरीका लिनक्स प्रोग्रामिंग पर एक पुस्तक प्राप्त कर रहा है।

इसके अलावा, लिनक्स खिड़की प्रबंधन के लिए एक डिफ़ॉल्ट एपीआई प्रदान नहीं करता है जैसे विंडोज़ करता है ताकि यदि आप ग्राफिकल एप्लिकेशन प्रोग्रामिंग कर रहे हैं तो आपको विंडोिंग लाइब्रेरी भी चुननी होगी।

1

windows.h का अर्थ है कि आपका एप्लिकेशन विंडोज ऑपरेटिंग सिस्टम के एपीआई का उपयोग करता है, लिनक्स पर अन्य पुस्तकालयों में 1-से-1 मैपिंग नहीं है।

यदि आप एप्लिकेशन को पोर्ट नहीं करना चाहते हैं तो आप शराब के नीचे अपना आवेदन चलाने पर विचार कर सकते हैं।

0

लिनक्स के पास विंडोज के लिए एक अलग प्रोग्रामिंग मॉडल है। यदि आप एक सीरियल पोर्ट प्रोग्रामिंग में रूचि रखते हैं (आरएस 485 आरएस 232 के समान है) here एक ट्यूटोरियल है जो आपको मूल बातें दिखाना चाहिए।

1

आपके पास 2 विकल्प हैं।

  1. अपने लापता प्रकारों को टाइप करने के लिए टाइप करें जो आपके नए ओएस के लिए उपयुक्त हैं।
  2. कोड को उन प्रकारों का उपयोग न करने के लिए लिखें।

मुझे संदेह है कि कोई भी आपको यह बताने में सक्षम होगा कि आपको प्रत्येक मामले के विनिर्देशों को जानने के बिना बंदरगाह के साथ क्या करना चाहिए। Windows.h के बारे में बात यह है कि यह विंडोज ओएस पर निर्भर करता है ... आपको उन कार्यों को बदलना होगा जिन्हें आप कॉल कर रहे हैं। उस स्थिति में अब आप उन प्रकारों का उपयोग नहीं करेंगे जो आपके पास नहीं हैं।
मूल रूप से आपको समझना होगा कि विंडोज एपीआई का उपयोग आपके लक्ष्य ओएस के लिए समकक्ष कार्यों के लिए किया जा रहा है और खोजने के लिए क्या किया जा रहा है।

11

लिनक्स में windows.h के लिए बोलने के लिए कोई "समतुल्य" नहीं है, तो आपको लिनक्स के लिए अपने कोड को फिर से लिखना, या बेहतर, अपने कोड को फिर से लिखना होगा (यदि यह बहुत जटिल नहीं है)।

हालांकि, अगर हम खिड़कियों की अनदेखी विशिष्ट एपीआई, आप (, DWORD संभालते हैं, ...) typedef त्रुटियों को ठीक करने में सक्षम हो सकता है:

#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