मैं एक साधारण MAPI प्रदाता DLL कि निम्नलिखित कार्यों को लागू करता है लिखा है:कैसे घोषित करें कि मेरा सरल एमएपीआई प्रदाता डीएलएल यूनिकोड है और मैपिसेन्डमेल समर्थन का समर्थन करता है?
MapiLogOn
MapiLogOff
MapiSendMail
MapiSendDocuments
MapiFindNext
MapiReadMail
MapiSaveMail
MapiDeleteMail
MapiFreeBuffer
MapiAddress
MapiDetails
MapiResolveName
मैं रजिस्ट्री HKLM\SOFTWARE\Clients\Mail\
में मेरी DLL पंजीकृत किया है और "डिफ़ॉल्ट प्रोग्राम" के माध्यम से इसे चुन सकते हैं।
यह पूरी तरह से काम करता है (लेकिन केवल एएनएसआई वर्णों के साथ)!
अब, मैं इसके लिए यूनिकोड समर्थन जोड़ने की कोशिश कर रहा हूं।
मैंने मैपिसेन्डमेल को लागू किया है और इसे डीएलएल के "निर्यात" खंड में घोषित कर दिया है, ताकि एमएपीआई डीएलएल स्टब देख सके कि यह मैपिसेन्डमेल का निर्यात करता है और इस प्रकार यूनिकोड है।
हालांकि, मेरे डीएलएल का यह यूनिकोड मैपेंडेंडमेल कार्य कभी नहीं कहा जाता है। एएनएसआई संस्करण, मैपिसेन्डमेल, इसके बजाय कहा जाता है।
जब मैं उन अनुप्रयोगों का उपयोग करता हूं जो एमएपीआई कहते हैं, उदा। माइक्रोसॉफ्ट इंटरनेट एक्सप्लोरर (ईमेल द्वारा लिंक भेजने के लिए) या एडोब रीडर (ईमेल द्वारा फाइलें भेजने के लिए), राष्ट्रीय पात्र मैपिसेंडमेल में मेरे डीएलएल में प्रश्न चिह्नों द्वारा प्रतिस्थापित किए जाते हैं। यदि मैं डिफ़ॉल्ट मेल क्लाइंट को Outlook में स्विच करता हूं, तो माइक्रोसॉफ्ट इंटरनेट एक्सप्लोरर राष्ट्रीय अक्षरों को सही तरीके से भेजता है।
इस बीच, आउटलुक अपने एमएपीआई डीएलएल को यूनिकोड के रूप में विज्ञापित करता है। मुझे यह रजिस्ट्री मान "SupportUTF8" HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\REGISTRY\MACHINE\Software\Clients\Mail\Microsoft Outlook
जब मैंने इस रजिस्ट्री कुंजी को हटा दिया है, तो माइक्रोसॉफ़्ट इंटरनेट एक्सप्लोरर ने ईमेल द्वारा फाइल/भेजें/लिंक चुनते समय Outlook को कॉल करते समय राष्ट्रीय अक्षरों को प्रश्न चिह्नों में बदलना शुरू कर दिया था।
तो ऐसा लगता है कि HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun.....
के तहत "SupportUTF8" का अर्थ था।
मेरे क्लाइंट HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail\.....
मेरे मुवक्किल को SupportUTF8 जोड़ा जा रहा है के तहत पंजीकृत है कोई मतलब नहीं (अभी भी निशान पर सवाल खड़ा कर दिया है, और कोई MapiSendMailW कहा जाता है लेकिन MapiSendMail MSIE से (फ़ाइल | भेजें | ई-मेल द्वारा लिंक) यहां तक कि HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail\Microsoft Outlook
को SupportUTF8 जोड़ने। जब Outlook क्लाइंट
समर्थनUTF8 रजिस्ट्री मान के बावजूद, जब मेरे क्लाइंट को एमएस वर्ड से बुलाया जाता है, तो यह एमआईआईई को प्रश्न चिह्नों पर प्रतिबिंबित नहीं करता है, लेकिन यह मैरीसेन्डमेल प्राप्त करता है, लेकिन ulReserved में इसे यूटीएफ 8 कोडपेज नंबर मिलता है, इसलिए मेरा ग्राहक राष्ट्रीय पात्रों को प्रदर्शित करने में सक्षम है। लेकिन यह एमएसआईई (फाइल | भेजें | ईमेल द्वारा लिंक) से नहीं होता है जो हमेशा बदलता है मेरे क्लाइंट के साथ प्रश्न चिह्नों के लिए राष्ट्रीय पात्र।
मुझे अपने डीएलएल में क्या जोड़ना चाहिए ताकि विंडोज स्टब इसे यूनिकोड के रूप में देख सके और MapiSendMailW को कॉल कर सके? क्या मुझे स्टूल को दिखाने के लिए डीएलएल को अन्य कार्यों को कार्यान्वित करना चाहिए कि यह यूनिकोड है? Windows 10 64-बिट पर
1):
मैं दो परीक्षण किया है। एमएपीआई डीएलएल 32-बिट है। प्रोसेस मॉनिटर (Sysinternals से) से पता चलता है कि एमएसआईई एक प्रक्रिया fixmapi.exe चलाता है जो इसके बदले में एमएपीआई कॉल करता है।
2) विंडोज 7 32-बिट पर। कोई fixmapi.exe का उपयोग नहीं किया जाता है: एमएसआईई सीधे मेरे डीएलएल को कॉल करता है, लेकिन अभी भी MapiSendMailW को कॉल नहीं करता है।
हालांकि, मेरा परीक्षण एमएपीआई एप्लिकेशन मैपेंडेंडमेल के साथ मेरे डीएलएल को कॉल करता है।
ब्रियर, आईटी स्टाफ डॉक्टर हिट के माध्यम से खेती बहुत कम खुशी है। मुझे लगता है कि आप [इस संपत्ति] की तलाश में हैं (https://msdn.microsoft.com/en-us/library/cc815684.aspx), सुनिश्चित नहीं है। –
PR_STORE_UNICODE_MASK विस्तारित एमएपीआई से है, जबकि मैंने सरल एमएपीआई लागू किया है, बिना किसी स्टोर के संदेश भेजने के लिए। –