ID Artikel: 315458 - Kajian Terakhir: 24 September 2011 - Revisi: 2.0

PRB: Fungsi sederhana MAPI BMAPI mungkin tidak bekerja dari kode Visual Basic

Tips SistemThis article applies to a different operating system than the one you are using. Article content that may not be relevant to you is disabled.
PENTING: Artikel ini berisi informasi tentang pengubahan registri. Sebelum Anda memodifikasi registri, pastikan membuat cadangan dan pastikan bahwa Anda paham bagaimana memulihkan registri apabila ada masalah. Untuk informasi tentang cara membuat cadangan, memulihkan, dan mengedit registri, klik nomor artikel di bawah ini untuk melihat artikel di dalam Basis Pengetahuan Microsoft:
256986  (http://support.microsoft.com/kb/256986/EN-US/ ) Deskripsi Registri Microsoft Windows
Perbesar semua | Perkecil semua

GEJALA

Panggilan untuk MAPISendMail fungsi yang dibuat dari kode Microsoft Visual Basic mungkin gagal dengan pesan galat yang menyerupai berikut ini:
Microsoft Outlook
tidak ada klien e-mail bawaan atau klien e-mail yang ada tidak dapat memenuhi permintaan olah pesan. Jalankan Microsoft Outlook dan setel sebagai klien e-mail bawaan.
Masalah ini sering terjadi ketika Microsoft Outlook Express diatur sebagai default mail client.

PENYEBAB

Visual Basic program yang menggunakan sederhana MAPI biasanya menggunakan Menyatakan pernyataan yang impor fungsi BMAPI. Ketika Outlook Express default mail client, MAPI rintisan perpustakaan tidak rute ini panggilan untuk Outlook Express; Sebaliknya, panggilan gagal dan pesan kesalahan ditampilkan.

PEMECAHAN MASALAH

Salah satu cara untuk mengatasi masalah ini adalah untuk tidak menggunakan Menyatakan pernyataan yang referensi fungsi BMAPI. Namun, karena Visual Basic tidak dapat memanggil fungsi-fungsi non-BMAPI (kecuali jika Anda memanipulasi struktur yang diperlukan di tingkat biner), Anda mungkin ingin untuk menulis kode untuk memanggil fungsi MAPI sederhana dari bahasa yang dapat menangani struktur, seperti c atau C++.

Dua resolusi yang disediakan di akhir bagian "Informasi selengkapnya".

STATUS

Perilaku ini sesuai rancangannya.

INFORMASI LEBIH LANJUT

MAPI rintisan perpustakaan, Mapi32.dll, adalah DLL yang biasanya diambil oleh aplikasi klien untuk menggunakan sederhana MAPI. Perpustakaan rintisan rute panggilan ke implementasi MAPI yang sesuai, berdasarkan pengaturan registri. Dengan cara ini, berbagai implementasi dapat hidup berdampingan tanpa Timpa satu sama lain.

Ketika panggilan dilakukan untuk fungsi yang diekspor oleh perpustakaan rintisan, perpustakaan mengikuti langkah-langkah berikut:
  1. Menentukan apakah fungsi adalah sederhana MAPI fungsi atau fungsi diperpanjang MAPI. Fungsi-fungsi ekspor ditandai di perpustakaan rintisan sebagai sederhana MAPI fungsi:

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

    Semua fungsi ekspor lain yang diperpanjang MAPI fungsi.
  2. Tampak dalam kunci registri berikut untuk menentukan saat ini pelaksanaan MAPI default:
    HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail::(default)
  3. Kemudian tampak di bawah klien kunci untuk menemukan jalan benar DLL untuk memuat. Jika fungsi fungsi MAPI sederhana, beban DLL yang ditentukan oleh DllPath nilai, dan kemudian memanggil fungsi. Jika fungsi fungsi diperpanjang MAPI, banyak DLL yang ditentukan oleh DllPathEx nilai. Setelah menemukan DLL yang sesuai, kemudian panggilan fungsi.

    Dari Microsoft Outlook, misalnya, tampak nilai DLLPath atau DLLPathEx di bawah tombol berikut:
    HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail\Microsoft Outlook
  4. Jika DllPathEx atau DllPath tidak ditemukan, rintisan perpustakaan menggunakan file Mapi32x.dll, yang terletak di direktori yang sama sebagai perpustakaan rintisan. File ini adalah salinan berganti nama menjadi Mapi32.dll file yang sudah ada ketika perpustakaan rintisan diinstal. Pada banyak sistem, terutama di mana hanya Outlook dan Outlook Express telah diinstal, file ini tidak ada.
  5. Jika perpustakaan rintisan gagal untuk menemukan Mapi32x.dll, itu akan menampilkan pesan yang terletak di salah satu tombol berikut ini:
    HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail::PreFirstRun

    -atau-

    HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail::NoMailClient
Alasan untuk masalah ketika menggunakan Outlook Express adalah sebagai berikut:
  1. Sebagian besar menggunakan kode Visual Basic Menyatakan pernyataan berdasarkan Mapivb32.bas modul, yang impor MAPISendMail sebagai BMAPISendMail. Sebagian besar fungsi-fungsi SimpleMAPI lainnya juga dinyatakan dengan BMAPI setara.Untuk informasi tambahan, klik nomor artikel di bawah ini untuk melihat artikel di dalam Basis Pengetahuan Microsoft:
    163216  (http://support.microsoft.com/kb/163216/EN-US/ ) Mapivb32.bas yang diperbarui untuk MAPI sederhana pada 32-Bit platform
  2. Karena fungsi BMAPI tidak berada pada daftar fungsi MAPI sederhana yang menggunakan DLL yang ditentukan dalam DllPath, perpustakaan rintisan rute mereka dengan menggunakan nilai dalam DllPathEx.
  3. Karena Outlook Express tidak melaksanakan diperpanjang MAPI, itu tidak memiliki nilai ditetapkan untuk DllPathEx.
  4. Perpustakaan rintisan mencoba menggunakan Mapi32x.dll, yang tidak ada, dan sebagai akibatnya menampilkan PreFirstRun kepada kami.
Ada dua cara tambahan untuk bekerja di sekitar masalah:
  • Resolusi sementara adalah untuk menentukan apakah Outlook Express default mail client, dan jika, menambahkan DllPathEx nilai registri sebagai berikut:
    HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail\Outlook Express::DllPathEx = %ProgramFiles%\Outlook Express\msoe.dll
    PERINGATAN: Jika Anda menggunakan Peninjau Suntingan Registri secara tidak benar, Anda mungkin mengalami masalah serius yang mengharuskan Anda untuk menginstal ulang sistem operasi. Microsoft tidak dapat menjamin bahwa Anda dapat menyelesaikan masalah yang bermula dari menggunakan Peninjau Suntingan Registri. Menggunakan Peninjau Suntingan Registri risiko Anda sendiri.

    Karena Outlook Express mengimplementasikan dan ekspor BMAPIFunctions dari Msoe.dll, pengaturan DllPathEx memungkinkan perpustakaan rintisan untuk rute panggilan ke mereka. Bahaya dalam melakukan hal ini adalah bahwa klien yang mencoba untuk menggunakan diperpanjang MAPI akan menerima kesalahan (karena Msoe.dll tidak ekspor fungsi diperpanjang MAPI) ketika itu mungkin sebaliknya telah menggunakan Mapi32x.dll berhasil.
  • Untuk memaksa aplikasi untuk menggunakan Outlook Express implementasi untuk semua panggilan MAPI, menciptakan nilai baru di bawah kunci registri berikut:
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Messaging Subsystem\MSMapiApps
    Menetapkan nama nilai untuk nama aplikasi Anda (seperti MyApp.exe), dan kemudian tetapkan nilai ke Outlook Express. Ini bypasses rintisan perpustakaan dan kekuatan untuk lulus semua panggilan MAPI, termasuk panggilan BMAPI langsung ke Outlook Express.

Berlaku bagi:
  • Microsoft Office Outlook 2007
Kata kunci: 
kbmsg kbprb kbmt KB315458 KbMtid
Penerjemahan MesinPenerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:315458  (http://support.microsoft.com/kb/315458/en-us/ )