2012-08-27 45 views
7

मैं मोनो ढांचे के तहत लिनक्स के लिए एक छोटा सा एप्लीकेशन लिखना शुरू कर रहा हूं, एप्लिकेशन अनिवार्य रूप से बहुत कम उपयोगकर्ता इंटरैक्शन के साथ एक छोटा कियोस्क फ्रंट-एंड होगा। यह उसी एप्लिकेशन के पिछले संस्करण को प्रतिस्थापित करना है जो 100% टेक्स्ट/कंसोल आधारित था।मोनो में एक लिनक्स फ्रेमबफर का उपयोग कैसे करें (मोनो कैरो/जीटीके #)?

चूंकि यह रास्पबेरी पीआई पर चलता है, मैं एक्स चलाना टालना चाहता हूं और मेरा एप्लिकेशन सीधे फ्रेमबफर से बात करना चाहता हूं। मैं मोनो फ्रेमवर्क और सी # का उपयोग अपनी विकास भाषा के रूप में कर रहा हूं क्योंकि मुझे सी # बहुत अच्छी तरह से पता है। इस उदाहरण में पोर्टेबिलिटी कोई मुद्दा नहीं है।

मुझे उचित पुस्तकालयों और बाइंडिंग खोजने में कुछ परेशानी हो रही है ताकि मुझे मोनो से फ़्रेमबफर तक पहुंचने दें। GTK# पुस्तकालय सभी एक्स 11 इंटरफ़ेस को स्पष्ट रूप से बाध्य करते हैं, और किसी भी मामले में, एआरएम सॉफ्ट-फ्लोट (आर्मेल) आर्किटेक्चर के लिए डेबियन व्हीज़ी में प्री-बिल्ट जीटीकेएफबी लाइब्रेरी नहीं दिखते हैं।

Mono.Cairo पुस्तकालय एक DirectFBSurface प्रकार को उजागर करता है, फिर भी है कि सतह के लिए निर्माता दो IntPtr तर्क लेता है और दस्तावेज नहीं है, इसलिए मैं नहीं जानता कि क्या निर्माता ठीक से एक काहिरा सतह के रूप में फ्रेमबफर आरंभ करने में पारित किया जाना चाहिए।

क्या किसी ने लिनक्स फ्रेमबफर से बात करने के लिए मोनो और सी # के साथ काम किया है, और यदि हां, तो क्या आप एफबी पर ड्राइंग शुरू करने और शुरू करने के लिए बुनियादी उदाहरण प्रदान कर सकते हैं या सहायता के लिए ऑनलाइन दस्तावेज को इंगित कर सकते हैं?

अद्यतन 1

मैंने सोचा कि मैं दोनों निर्माता मापदंडों के लिए null साथ DirectFBSurface instantiating, निम्न कोड के साथ की कोशिश करेंगे:

public static void Main(string[] args) 
{ 
    // ... 
    DirectFBSurface surface = new DirectFBSurface(((IntPtr)null), ((IntPtr)null)); 
    // ... 
} 

मैं इस एक अपवाद का संकेत उत्पन्न करने के लिए उम्मीद है कि null पैरामीटर मानों की अनुमति नहीं थी, हालांकि ऐसा लगता है कि DirectFBSurface को या तो Mono.Cairo में लागू नहीं किया गया है या डेबियन व्हीज़ी (आर्मेल) के साथ भेजे गए लाइब्रेरी में संकलित नहीं किया गया है:

Unhandled Exception: System.EntryPointNotFoundException: cairo_directfb_surface_create 
    at (wrapper managed-to-native) Cairo.NativeMethods:cairo_directfb_surface_create (intptr,intptr) 
    at Cairo.DirectFBSurface..ctor (IntPtr dfb, IntPtr dfb_surface) [0x00000] in <filename unknown>:0 
    at Info.Insch.SandBox.TestCairo.Program.Main (System.String[] args) [0x00000] in <filename unknown>:0 

तो ऐसा लगता है कि Mono.Cairo दृष्टिकोण शायद मेरी जरूरतों के लिए काम नहीं करेगा, और जैसा कि ऊपर वर्णित है, GTK# फ्रेमबफर पुस्तकालय armel के लिए डेबियन खरखरा का हिस्सा बनने का प्रतीत नहीं होता। क्या लाइब्रेरी का एक और सेट है जिसे मैं लिनक्स फ्रेमबफर को मोनो से एक्सेस करने के लिए उपयोग कर सकता हूं?

+0

क्या यह आप हैं? http://www.raspberrypi.org/phpBB3/viewtopic.php?t=15788&p=160933 – IanNorton

+0

यदि ऐसा है, तो आप काहिरा में एक सॉफ्टवेयर सतह पर आकर्षित कर सकते हैं और इसे हर बार एसडीएल सतह पर फिसल सकते हैं। – IanNorton

+2

ऐसा प्रतीत होता है कि आपको मूल पॉइंटर को मूल IDirectFB और IDirectFBSurface में पास करने की आवश्यकता है। Mono.Cairo के लिए स्रोत यहां दिया गया है: https://github.com/mono/mono/blob/master/mcs/class/Mono.Cairo/Mono.Cairo/DirectFBSurface.cs और यहां उस निर्माता के लिए कैरो स्रोत है: http : //cgit.freedesktop.org/cairo/tree/src/cairo-directfb-surface.c#n499 – joncham

उत्तर

2

EntryPointNotFoundException आपको मिलता है, इसका मतलब है कि cairo_directfb_surface_create के साथ तर्क (IntPtr, IntPtr) तर्क के रूप में आपके libcairo.so.2 लाइब्रेरी में डेबियन से नहीं मिला था। यदि कैरो में संकलन समय पर directfb सक्षम नहीं किया गया है, तो यह संभवतः मामला हो सकता है। आप ऐसा करके काहिरा में directfb समर्थन के लिए जाँच कर सकते हैं:

readelf -Ws /usr/lib/libcairo.so.2 | grep directfb 

यदि परिणाम (उत्पादन) खाली है, आप directfb समर्थन की कमी है। इस मामले में आपको --enable-directfb तर्क के साथ कैरो को कॉन्फ़िगर करना होगा कॉन्फ़िगर स्क्रिप्ट को पास किया गया।

मैंने ओपनएसयूएसई 12.1 और फेडोरा 17 बॉक्स पर परीक्षण किया है, और दोनों डिफ़ॉल्ट रूप से directfb सक्षम कैरो को शिप नहीं करते हैं। हालांकि मुझे डेबियन के बारे में पता नहीं है, आपको खुद का परीक्षण करना होगा।