2015-08-10 10 views
7

मैं एक स्टैंडअलोन डिमन निष्पादन योग्य पर काम कर रहा हूं जिसे मेजबान मशीन पर मौजूदा तृतीय पक्ष एनपीएपीआई प्लगइन लोड करने की आवश्यकता है। मैं जो करना चाहता हूं वह प्लगइन से उत्पन्न बनावट को बनावट/सतह पर प्रस्तुत करना है।मैक ऐप में एक एनपीएपीआई प्लगइन लोड करने में समस्या

इसे मैक और विंडोज दोनों पर काम करने की ज़रूरत है, लेकिन चूंकि मैं एक भारी मैक उपयोगकर्ता हूं, इसलिए मैंने पहले मैक संस्करण बनाने का फैसला किया। हमारे पास इस प्लगइन के लिए स्रोत कोड नहीं है - यह एक बाहरी विक्रेता है जो हमें प्रदान करता है - इसलिए यह एक ब्लैक बॉक्स कार्यान्वयन है।

वेब पर, प्लगइन फ़्लैश करने के लिए एक बहुत ही समान तरीके से काम करता है। आप एक निश्चित माइमटाइप (यानी एप्लिकेशन/फ्लैश) से जुड़े वेबपृष्ठ में एक क्षेत्र एम्बेड करते हैं और जो प्लगइन लोड करता है, जो बदले में प्लगइन को एक निश्चित फ़ाइल लोड करने के लिए निर्देश देगा (एक एसडब्ल्यूएफ सोचें) और फिर इसे प्रस्तुत करें।

क्या मैं अभी कर रहा हूँ है:

1. Open the library (Bundle) and extract NP_Initialize etc. 
2. Call NP_Initialize -> returns the object with NPP function pointers etc 
3. Call NPP_New (this calls a set of NPP functions) -> ultimately returns NPERR_NO_ERROR. 

NPERR_NO_ERROR के बाद से, उम्मीद प्रतिक्रिया है मैं इन तीन चरणों को सफलतापूर्वक पूरा कर लिया गया यह सोचते हैं रहा हूँ।

एनपीपी_न्यू के दौरान, प्लगइन कोको इवेंट मॉडल और कोर एनीमेशन (या वैकल्पिक रूप से, कोर ग्राफिक्स, यदि मैं कोर एनीमेशन के लिए झूठी वापसी करता हूं) दोनों का अनुरोध करता हूं।

तो मैं फोन:

4. NPP_SetWindow 
5. Once the window is set, I load an online file with CURL, and call NPP_NewStream/WriteReady/Write and DestroyStream. 

मैं NPAPI दस्तावेज में क्या मिल सकता है से, NewStream/WriteStream/आदि कार्यों मूल रूप से प्लगइन की स्मृति में एक फ़ाइल को लोड, तो यह गाया जा सकता है।

प्लगइन ब्राउज़र में कोर एनीमेशन और कोर ग्राफिक्स दोनों का समर्थन करता है, और एनपीएपीआई प्लगइन का समर्थन करने वाले ब्राउज़र में ठीक काम करता है।

एक बार जब मैंने उपरोक्त सभी किया है, तो मैं एक बनावट प्रस्तुत करने का प्रयास करता हूं, लेकिन कोर ग्राफिक्स मोड में जब मैं CGContextRef के साथ एनपीपी_इवेंट फ़ंक्शन कॉल से झूठी प्रतिक्रियाएं प्राप्त करता रहता हूं। कोर एनीमेशन मोड में चलते समय, मैं बनावट को renderInContext का उपयोग करके बिटमैप में प्रस्तुत करता हूं लेकिन पूरी छवि रिक्त/पारदर्शी रहता है।

यह एक लंबा शॉट है, लेकिन क्या किसी के पास कोई विचार है?

+1

आपकी "पृष्ठ" में प्लगइन से आने वाले किसी भी अन्य कॉल कर रहे हैं:

(2010 से) अपने विषय के बारे में अतिरिक्त दिलचस्प पढ़ने? क्या आपने प्लगइन से रूट एनपीओब्जेक्ट को कॉल और अनुरोध किया था?प्लगइन की उम्मीद है कि आपने अभी तक – taxilian

+0

प्रदान नहीं किया है, मैं यह कैसे पता लगा सकता हूं कि मुझे प्लगइन को वास्तव में क्या प्रदान करने की आवश्यकता है? एनपीपी_न्यू के दौरान "नकली" ब्राउज़र में प्लगइन (कुछ Get/SetValue, Invoke, मूल्यांकन) से एनपीएन कार्यों का एक टन कहा जाता है। मैं अपने सर्वोत्तम अनुमान के आधार पर एनपीओब्जेक्ट्स लौटाता हूं कि क्या लौटाया जाना चाहिए। परीक्षण और त्रुटि के बाद (यदि लौटाई गई वस्तुएं सही प्रकार के नहीं हैं तो प्लगइन बंद हो जाएगा), एनपीपी_न्यू अंततः NO_ERR लौटाता है। मैंने प्लगइन से रूट एनपीओब्जेक्ट नहीं कहा है (हालांकि प्लगइन एनपीपी_न्यू के दौरान ब्राउज़र से रूट एनपीओब्जेक्ट का अनुरोध करता है)। लेकिन मैं उस वस्तु के साथ क्या करूँगा? – Charles

+0

ठीक है, तो मैंने प्रॉक्सी प्लगइन लॉगर स्थापित किया है। फ़ायरफ़ॉक्स के माध्यम से प्लगइन लोड करते समय, ऐसा लगता है कि NPP_New सफलतापूर्वक NO_ERR लौटने के बाद एक NPN_GetURLNotify ईवेंट प्राप्त होता है। हालांकि, मेरे सी ++ ऐप को यह कभी प्राप्त नहीं होता है। क्या मुझे इसे कैप्चर करने के लिए थ्रेडिंग या इवेंट लूप या कुछ सेट अप करने की आवश्यकता है? – Charles

उत्तर

2

मुझे लगता है कि आप इस यूआई थ्रेड का उपयोग नहीं करते हैं, अगर आप मामले में एक अलग थ्रेड में अपना कोड आज़माते हैं। हालांकि, यह चीजों की एक संख्या से संबंधित हो सकता, स्वयं छवि के साथ शुरू (क्योंकि यह खाली/पारदर्शी है), यह मैं क्या उपयोग करें: नीचे

UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, [[UIScreen mainScreen] scale]); 
[view.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); //after this you should see the image 

टिप्पणी Mozilla CoreAnimationDrawingModel plugin

(से जुड़े हुए हैं आपका ब्लैक बॉक्स प्लगइन इस पर आधारित हो सकता है?)

सुनिश्चित करें कि आप फ़्लैश 10.1+ का उपयोग करते हैं क्योंकि कोर एनीमेशन ड्राइंग मॉडल उस संस्करण से पहले समर्थित नहीं है (आपने एक एसडब्ल्यूएफ लोड किया है)।

नोट! यदि आपका ब्लैक बॉक्स प्लगइन QTMovieLayer का उपयोग करके प्रस्तुत करता है तो यह असफल होना चाहिए, क्योंकि यह renderInContext के साथ समर्थित नहीं है। Core Animation

संबंधित मुद्दे