PRB: BMAPI MAPI แบบธรรมดาฟังก์ชันอาจไม่งานจากรหัส Visual Basic

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 315458 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
สิ่งสำคัญ: บทความนี้ประกอบด้วยข้อมูลเกี่ยวกับการปรับเปลี่ยนรีจิสทรี ก่อนที่จะแก้ไขรีจิสตรี คุณต้องสำรองข้อมูลนี้ไว้ และต้องทราบวิธีเรียกข้อมูลรีจิสตรีกลับคืน กรณีที่มีปัญหาเกิดขึ้น สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีสำรอง คืนค่า และแก้ไขรีจิสทรี โปรดคลิกที่หมายเลขบทความต่อไปนี้ เพื่อดูบทความในฐานความรู้ของ Microsoft::
256986คำอธิบายสำหรับ Microsoft Windows Registry
ขยายทั้งหมด | ยุบทั้งหมด

อาการ

เรียกไปMAPISendMailฟังก์ชันที่ทำงานจากรหัส Microsoft Visual Basic อาจล้มเหลว ด้วยข้อผิดพลาดที่คล้ายกับต่อไปนี้:
Microsoft Outlook
ไม่มีการไคลเอ็นต์จดหมายเริ่มต้น หรือไคลเอ็นต์จดหมายปัจจุบันไม่สามารถตอบสนองคำขอส่งข้อความ กรุณาเรียกใช้ Microsoft Outlook ของคุณ และตั้งค่าเป็นไคลเอ็นต์จดหมายเริ่มต้น
ปัญหานี้มักจะเกิดขึ้นเมื่อ Microsoft Outlook Express มีการตั้งค่าเป็นไคลเอ็นต์จดหมายเริ่มต้น

สาเหตุ

visual Basic โปรแกรมที่ใช้โดยปกติใช้ MAPI แบบธรรมดาประกาศคำสั่งที่นำเข้าฟังก์ชัน BMAPI เมื่อ Outlook Express คือ ไคลเอ็นต์จดหมายเริ่มต้น ไลบรารี stub MAPI ไม่สามารถเรียกเหล่านี้กับ Outlook Express กระบวนผลิต แทนการเรียกล้มเหลว และมีแสดงข้อผิดพลาด

การแก้ไข

วิธีการหนึ่งในการแก้ไขปัญหานี้จะไม่มีการใช้ประกาศคำสั่งที่อ้างอิงฟังก์ชัน BMAPI อย่างไรก็ตาม เนื่องจาก Visual Basic ไม่สามารถเรียก ฟังก์ชันไม่ใช่แบบ BMAPI (จนกว่าคุณจัดการโครงสร้างที่ต้องการที่ระดับไบนารี) คุณอาจต้องการเขียนโค้ดการเรียกใช้ฟังก์ชันต่าง ๆ ของ MAPI แบบธรรมดาจากภาษาที่สามารถจัดการโครงสร้าง เช่น C หรือแบบ c ++

วิธีแก้ปัญหาสองอื่น ๆ จะมีให้ในตอนท้ายของส่วน "ข้อมูลเพิ่มเติม"

สถานะ

ลักษณะการทำงานนี้เกิดจากการออกแบบ

ข้อมูลเพิ่มเติม

ไลบรา MAPI stub รี Mapi32.dll มี DLL ที่มักจะโหลด โดยแอพลิเคชันไคลเอนต์ใช้ MAPI แบบธรรมดา ไลบรารี stub ได้แก่การเรียกการใช้ที่เหมาะสม MAPI งาน ขึ้นอยู่กับการตั้งค่ารีจิสทรี ด้วยวิธีนี้ implementations ต่าง ๆ สามารถอยู่ร่วมไม่เขียนทับกัน

เมื่อทำการเรียกไปยังฟังก์ชันส่งออก โดยไลบรารี stub ไลบรารีทำตามขั้นตอนเหล่านี้:
  1. ดังกล่าวกำหนดว่าฟังก์ชันฟังก์ชัน MAPI แบบธรรมดาหรือฟังก์ชันขยาย MAPI ฟังก์ชันส่งออกต่อไปนี้จะทำเครื่องหมายในไลบรารี stub เป็นการฟังก์ชัน MAPI แบบธรรมดา:

    • MAPIAddress
    • MAPIDeleteMail
    • MAPIDetails
    • MAPIFindNext
    • MAPIFreeBuffer
    • MAPILogoff
    • MAPILogon
    • MAPIReadMail
    • MAPIResolveName
    • MAPISaveMail
    • MAPISendDocuments
    • MAPISendMail

    ฟังก์ชันส่งออกอื่น ๆ ทั้งหมดถูกขยาย MAPI ฟังก์ชัน
  2. จะปรากฏในคีย์รีจิสทรีต่อไปนี้เพื่อดูว่าการใช้งาน MAPI การเริ่มต้นปัจจุบัน:
    HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail::(default)
  3. ออกจากนั้นปรากฏภายใต้คีย์ของไคลเอ็นต์ในการค้นหาเส้นทางของ DLL ที่ถูกต้องโหลด ถ้าฟังก์ชันคือ ฟังก์ชัน MAPI แบบธรรมดา โหลด DLL ที่ระบุโดยDllPathค่า และจากนั้น เรียกฟังก์ชัน ถ้าฟังก์ชัน มีฟังก์ชัน MAPI แบบขยาย โหลด DLL ที่ระบุโดยDllPathExค่า หลังจากการค้นหา DLL ที่เหมาะสม มันแล้วเรียกฟังก์ชัน

    ในกรณีของ Microsoft Outlook ตัวอย่างเช่น จะค้นหาค่าDLLPathหรือDLLPathExภายใต้คีย์ต่อไปนี้:
    HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail\Microsoft Outlook
  4. ถ้าDllPathExหรือDllPathไม่พบ ไลบรารี stub ใช้แฟ้ม Mapi32x.dll ที่อยู่ในไดเรกทอรีเดียวกันเป็นไลบรารี stub แฟ้มนี้ถูกเปลี่ยนชื่อสำเนาของแฟ้ม Mapi32.dll ที่มีอยู่แล้วเมื่อมีการติดตั้งไลบรารี stub โดยทั่วไป ในหลายระบบ โดยเฉพาะอย่างยิ่งเหล่านั้น โดยเฉพาะ Outlook และ Outlook Express ได้รับการติดตั้ง แฟ้มนี้ไม่มีอยู่
  5. หากไลบรารี stub ล้มเหลวในการค้นหา Mapi32x.dll แสดงข้อความที่อยู่ในคีย์ต่าง ๆ ต่อไปนี้อย่างใดอย่างหนึ่ง:
    HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail::PreFirstRun

    หรือ

    HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail::NoMailClient
เหตุผลสำหรับปัญหาเมื่อใช้ Outlook Express มีดังนี้:
  1. โค้ด Visual Basic โดยส่วนใหญ่ใช้ประกาศคำสั่งขึ้นอยู่กับโมดู Mapivb32.bas ซึ่งนำเข้า MAPISendMail เป็น BMAPISendMail ฟังก์ชัน SimpleMAPI อื่น ๆ ส่วนใหญ่จะประกาศไปยังกับรายการเทียบเท่า BMAPI ของพวกเขาสำหรับข้อมูลเพิ่มเติม โปรดคลิกหมายเลขบทความต่อไปนี้ เพื่อดูบทความในฐานความรู้ของ Microsoft::
    163216ปรับปรุง Mapivb32.bas สำหรับ MAPI แบบธรรมดาบนแพลตฟอร์มแบบ 32 บิต
  2. เนื่องจากฟังก์ชัน BMAPI จะไม่ได้อยู่ในรายชื่อของฟังก์ชัน MAPI แบบธรรมดาซึ่งใช้ DLL ระบุไว้ในDllPathไลบรารี stub ได้แก่เหล่านั้น โดยใช้ค่าในDllPathEx.
  3. เนื่องจาก Outlook Express ไม่ใช้ MAPI แบบขยาย ได้มีกำหนดค่าDllPathEx.
  4. ไลบรารี stub ได้พยายามใช้ Mapi32x.dll ซึ่งไม่มีอยู่ และแสดงผลPreFirstRunข้อความ
มีสองวิธีเพิ่มเติมเพื่อหลีกเลี่ยงปัญหา:
  • วิธีแก้ปัญหาชั่วคราวคือ การตรวจสอบว่า Outlook Express ไคลเอ็นต์จดหมายเริ่มต้น ถ้าเป็น เพิ่มคำDllPathExค่ารีจิสทรีเป็นดังนี้:
    Express::DllPathEx HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail\Outlook = Express\msoe.dll %ProgramFiles%\Outlook
    คำเตือน: ถ้าคุณใช้ Registry Editor ไม่ถูกต้อง คุณอาจทำให้เกิดปัญหาร้ายแรงซึ่งอาจทำให้คุณติดตั้งระบบปฏิบัติการของคุณ ไมโครซอฟท์ไม่สามารถรับประกันว่า คุณจะสามารถแก้ปัญหาที่เกิดขึ้นจากการใช้ Registry Editor ไม่ถูกต้อง โปรดใช้ Registry Editor โดยยอมรับความเสี่ยงที่อาจเกิดขึ้น

    เนื่องจาก Outlook Express ใช้ และการส่งออก BMAPIFunctions จาก Msoe.dll เซ็ตDllPathExช่วยให้การในไลบรารี stub กระบวนผลิตการเรียกไปยังแฟ้มเหล่านั้น danger ในการทำเช่นนี้จะให้ไคลเอนต์ที่มีความพยายามที่ใช้ขยาย MAPI จะได้รับข้อผิดพลาด (เนื่องจาก Msoe.dll ไม่ส่งออกฟังก์ชันขยาย MAPI) เมื่อมันอาจแทนใช้ Mapi32x.dll เสร็จสมบูรณ์ได้
  • To force an application to use the Outlook Express implementation for all MAPI calls, create a new value under the following registry key:
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Messaging Subsystem\MSMapiApps
    Set the name of the value to the name of your application (such as MyApp.exe), and then set the value to Outlook Express. This bypasses the stub library and forces it to pass all MAPI calls, including the BMAPI calls, directly to Outlook Express.

คุณสมบัติ

หมายเลขบทความ (Article ID): 315458 - รีวิวครั้งสุดท้าย: 13 มกราคม 2554 - Revision: 3.0
ใช้กับ
  • Microsoft Office Outlook 2007
Keywords: 
kbmsg kbprb kbmt KB315458 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:315458

ให้ข้อเสนอแนะ

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com