एमएपीआई और प्रबंधित कोड अनुभव?

प्रबंधित कोड के भीतर से एमएपीआई कार्यों का उपयोग आधिकारिक रूप से असमर्थित है। जाहिर है, एमएपीआई अपने स्वयं के मेमोरी प्रबंधन का उपयोग करता है और यह प्रबंधित कोड के भीतर दुर्घटनाग्रस्त हो जाता है और जलता है (देखें यहां और यहां )

All I want to do is launch the default e-mail client with subject, body, AND one or more attachments.

इसलिए मैं MAPISend दस्तावेज़ देख रहा हूं और ऐसा लगता है कि यह काम करता है। लेकिन मैं वास्तव में उत्पादन कोड में फ़ंक्शन का उपयोग करने के लिए साहस इकट्ठा करने में सक्षम नहीं हूं।

क्या किसी ने इस समारोह का बहुत उपयोग किया है? क्या आपके पास कोई डरावनी कहानियां हैं?

पी एस। नहीं, मैं संलग्नक के लिए कमांड लाइन तर्क के साथ Outlook.exe को shellExecute नहीं करूँगा।

PPS. Attachment support is a requirement , so Mailto: solutions do not cut it for me.

0
ro fr bn
प्रश्न और लिंक के लिए धन्यवाद! एमएपीआई / प्रबंधित कोड चीज़ के बारे में पता लगाने से मुझे कुछ देव समय बचाया गया।
जोड़ा लेखक SkullDuggerT, स्रोत

8 उत्तर

कॉलिंग प्रक्रिया। Mailto: प्रोटोकॉल पर प्रारंभ करें (जैसा कि नीचे दिखाया गया है) आपको बुनियादी कार्यक्षमता देगा लेकिन अनुलग्नक नहीं देगा।

Process.Start("mailto:[email protected]?subject=TestCode&Body=Test Text");

आप संलग्नक पथ के साथ इस दृष्टिकोण को कर सकते हैं लेकिन यह विकल्प केवल 98 के दृष्टिकोण के पुराने संस्करण के साथ काम करता है। मुझे लगता है कि यह संभावित सुरक्षा जोखिम के कारण है।

अगर कोई outlook.exe का उपयोग करता है तो यह Outlook 2003 (और 2007 सेटिंग्स पर निर्भर) के तहत सुरक्षा चेतावनी देगा।

0
जोड़ा

निम्न कोड एमएपीआई का उपयोग इस तरह नहीं करता है, लेकिन यह मनमाने ढंग से अनुलग्नक के साथ "लिखें मेल" विंडो खोलता है।

(वास्तव में, यह पूरी तरह से अनचाहे है लेकिन मैंने इसे एक ऐसे एप्लिकेशन में खोला जिसे मैंने काम किया है)

using Microsoft.Office;
using Microsoft.Office.Core;

...

Outlook.Application outlook = new Outlook.Application();
Outlook.MailItem mail = (Outlook.MailItem) outlook.CreateItem(Outlook.OlItemType.olMailItem);

mail.BodyFormat = Outlook.OlBodyFormat.olFormatRichText;
mail.HTMLBody = "stuff";
mail.Subject = "more stuff";
string file = File.ReadAllBytes(...);
mail.Attachments.Add(file, Outlook.OlAttachmentType.olByValue, 1, file)

mail.Display(false);
0
जोड़ा

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

जब मैंने मैट स्टीहले से इस बारे में पूछा, तो मुझे मिली प्रतिक्रिया थी:

मुझे वास्तव में ऐसा करने के लिए एक बेहतर तरीका नहीं पता है और आपके द्वारा यहां चलाए गए किसी भी मुद्दे को शायद समर्थित परिदृश्य में पुन: उत्पन्न किया जाएगा (यानी वीबी 6 या अप्रबंधित सी ++)। बस जानते हैं कि यदि आप कभी भी किसी परिदृश्य में भाग गए थे तो इस समस्या को विशेष रूप से .NET से बुलाया गया था, इसलिए हमारे पास .NET का उपयोग न करने के लिए आपके लिए कोई अन्य सिफारिश नहीं होगी।

इसका उपयोग करने पर बिल्कुल एक आशीर्वाद नहीं है, बल्कि यह भी नहीं कह रहा है कि वास्तव में प्रबंधित कोड से ऐसा करने के लिए कोई अन्य विकल्प हैं।

0
जोड़ा

एक अलग सहायक EXE है जो कमांड लाइन पैरा (या उसके मानक इनपुट में पाइप) लेता है जो आवश्यक है और उसे अपने मुख्य ऐप से कॉल करें। यह आपके मुख्य ऐप की प्रक्रिया स्थान के बाहर एमएपीआई सामान रखता है। ठीक है, आप अभी भी एमएपीआई और .NET मिश्रण कर रहे हैं लेकिन बहुत ही कम समय में प्रक्रिया में। धारणा यह है कि एमएपीआई और सीएलआर लंबी चल रही प्रक्रियाओं के साथ मुद्दों का कारण बनना शुरू कर देता है।

हम दिमित्री Streblechenko के शानदार रिडेम्प्शन डेटा ऑब्जेक्ट्स लाइब्रेरी का उपयोग करते हैं जो हमें जेस्क्रिप्ट में ऐसे "शिम" कोड लिखने की अनुमति देता है और उसको आह्वान करें, जो सीएलआर और एमएपीआई दुनिया को अलग प्रक्रियाओं में रखता है, लेकिन एक समर्थित फैशन में।

@ क्रिस फोरियर रे। एक अप्रबंधित डीएलएल लिखना। यह काम नहीं करेगा क्योंकि यह मुद्दा एमएपीआई और प्रबंधित कोड को उसी प्रक्रिया में मिला रहा है

0
जोड़ा

आप Outlook रिडेम्प्शन का भी उपयोग कर सकते हैं, जो प्रबंधित कोड से समर्थित है; मुझे तुरंत यकीन नहीं है कि क्या इसमें एक साधारण मैपिसेंड दस्तावेज़ प्रतिस्थापन है, लेकिन यदि आपके कोई प्रश्न हैं तो दिमित्री उपयोगी है।

As for "crashes and burns", here's another quote from an MS support guy, here

यह ऐसी चीज है जो ज्यादातर काम करेगी। जब आप इसे लिख रहे हों तो यह काम करेगा। फिर जब आप इसका परीक्षण कर रहे हों तो यह काम करेगा। यह काम करेगा जबकि आपका ग्राहक इसका मूल्यांकन कर रहा है। फिर जैसे ही ग्राहक इसे तैनात करता है - बीएएम! यही वह समय है जब समस्याएं शुरू करने का फैसला किया जाएगा। और माइक्रोसॉफ्ट इसके साथ आपकी मदद नहीं करेगा, क्योंकि हमने आपको पहले स्थान पर ऐसा नहीं करने के लिए कहा था। :)

0
जोड़ा
मुझे लगता है कि पोस्टर एमएपीआई पर पर्याप्त भार डालकर प्रबंधित ऐप्स का जिक्र कर रहा था। उपयोगकर्ता अनुरोध पर बस मैपिसेंडमेल को कॉल करना संभवतः एक ही समस्या का कारण बनने की संभावना नहीं है।
जोड़ा लेखक Yuhong Bao, स्रोत

एमएपीआई के साथ अनुभवी किसी के लिए, इस पोस्ट को टाइप करने और प्रतिक्रिया पढ़ने (कोई अपराध नहीं) की तुलना में अप्रबंधित कोड (पढ़ने: सादा सी ++) से आप जो चाहते हैं उसे ठीक करने के लिए कोड को क्रैंक करने में उन्हें कम समय लगेगा।

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

HTH

0
जोड़ा
कोई भी मौका आप कोड को क्रैंक कर सकते हैं और इसे यहां पोस्ट कर सकते हैं?
जोड़ा लेखक JoshL, स्रोत

आपको एक अप्रबंधित डीएलएल बनाने में सक्षम होना चाहिए जो एमएपीआई का उपयोग करके आप जो ऑपरेशन करना चाहते हैं, और फिर अपने प्रबंधित कोड से डीएलएल का आह्वान करें। मैं एक सीधी एमएपीआई रैपर नहीं लिखूंगा, लेकिन ऐसा कुछ जो आपको एमएपीआई की सभी कार्यक्षमताओं को निष्पादित करता है, उस अप्रबंधित डीएलएल में निहित है। यह प्रबंधित कोड से एमएपीआई का उपयोग करने का सबसे सुरक्षित तरीका होगा।

0
जोड़ा

MAPISendDocuments is deprecated and might be removed. You should use MAPISendMail instead. See Simple MAPI

0
जोड़ा