2009-08-21 18 views
6

पर user32.dll के समतुल्य मैं एक लाइब्रेरी लिख रहा हूं जो विंडोज उपयोगकर्ता 32.dll लाइब्रेरी से कुछ फ़ंक्शंस का उपयोग करता है, लेकिन मैं इसे ओएस एक्स पर किराए पर देखने के लिए मोनो के साथ संकलित कर रहा हूं। दुर्भाग्य से यह नहीं मिल रहा है स्पष्ट कारणों से user32.dll लाइब्रेरी।ओएस एक्स

लेकिन मेरा सवाल यह है ... क्या ओएस एक्स पर एक समान पुस्तकालय है जिसका मैं उपयोग कर सकता हूं? मैं विशेष रूप से निम्नलिखित कार्यों की तलाश में हूं।

[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); 

मुझे लगता है कि वाइन स्थापित करने में मदद मिलेगी, लेकिन यदि संभव हो तो मैं इससे बचना पसंद करूंगा। रूबी Win32 wrapper का उपयोग भी एक विकल्प है?

+1

विंडो मॉडल पूरी तरह से भिन्न है - क्या आप इसके लिए शुद्ध मोनो कॉल का उपयोग नहीं कर सकते? अन्यथा आपको कोको/मोनो पुस्तकालयों में से एक को देखना होगा – Mark

उत्तर

5

the Mono website से:

आप कुछ है कि आपके मंच (आमतौर पर Win32 एपीआई) द्वारा प्रदान की गई बुला रहे हैं, तो आप अपने सभी लक्ष्य प्लेटफार्मों पर ही कार्यक्षमता को पूरा करने के लिए एक रास्ता खोजने के लिए होगा। इसका मतलब यह हो सकता है कि आप अपने अप्रबंधित कॉल को एक प्रबंधित समकक्ष के साथ बदल दें, या इसका मतलब यह हो सकता है कि आप किस प्लेटफॉर्म पर चल रहे हैं और Win32/* nix/OSX/etc को कॉल कर रहे हैं। बराबर।

(http://pinvoke.net कभी कभी तुम Win32 API कॉल करने में कामयाब रहे बराबर खोजने में मदद कर सकते हैं।)

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

और वे Interop with Native Libraries पर एक पृष्ठ से भी लिंक करते हैं।

pinvoke के माध्यम से देख रहे हैं, एक परिणाम यह है कि GetForegroundWindow संदर्भ mwinapi - पहली नज़र में, यह पोर्टेबल नहीं दिखता है, इसलिए आप एक प्रबंधित समाधान खोजने में भाग्य से बाहर हो सकते हैं।

1

शायद प्रत्यक्ष मैपिंग नहीं है। ओएस एक्स में कई पर्यावरण कोको/कार्बन/जावा/एक्स 11 मौजूद हैं और प्रत्येक पर्यावरण के अपने स्वयं के एपीआई हैं। कोको और जावा ऑब्जेक्ट ओरिएंटेड एपीआई हैं जबकि कार्बन और एक्स 11 फ़ंक्शंस पर आधारित हैं। ऐप्पल नए आवेदन के लिए कोको का उपयोग करने की सिफारिश करता है। आपको कोको वस्तुओं को तुरंत चालू करना होगा और आपके फ़ंक्शन कॉल के माध्यम से पहुंच को समाहित करना होगा।