Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
VSPackages dan COM menggunakan arsitektur yang sama untuk kesalahan. Fungsi SetErrorInfo dan GetErrorInfo adalah bagian dari antarmuka pemrograman aplikasi Win32 (API). Setiap VSPackage di lingkungan pengembangan terintegrasi (IDE) dapat memanggil API Win32 global ini untuk merekam informasi kesalahan yang kaya saat menerima pemberitahuan kesalahan. Visual Studio SDK menyediakan rakitan interop untuk mengelola informasi kesalahan.
Metode interop
Sebagai kenyamanan, IDE menyediakan metode, , SetErrorInfountuk digunakan alih-alih memanggil API Win32. Dalam kode terkelola gunakan SetErrorInfo. Ketika kesalahan HRESULT tiba di tingkat di mana pesan kesalahan harus ditampilkan (ini sering kali objek mengimplementasikan IOleCommandTarget handler perintah), IDE menggunakan metode lain, ReportErrorInfo, untuk menampilkan kotak pesan yang sesuai. Dalam kode terkelola ReportErrorInfo gunakan metode .
Sebagai implementer VSPackage, objek COM Anda biasanya menerapkan ISupportErrorInfo. Antarmuka ISupportErrorInfo memastikan bahwa informasi kesalahan yang kaya dapat bergerak secara vertikal ke atas rantai panggilan. Objek yang mungkin digunakan di seluruh proses atau di seluruh utas harus mendukung ISupportErrorInfo untuk memastikan bahwa informasi kesalahan yang kaya dinamai kembali dengan benar ke pemanggil.
Semua objek yang terkait dengan VSPackages dan yang terlibat dalam memperluas IDE, termasuk pabrik editor, editor, hierarki, dan layanan yang ditawarkan, harus mendukung informasi kesalahan yang kaya. Meskipun IDE tidak memerlukan objek VSPackage ini untuk diimplementasikan ISupportErrorInfo, ide selalu didorong.
IDE bertanggung jawab untuk melaporkan informasi kesalahan dan menampilkannya kepada pengguna Visual Studio setiap kali HRESULT disebarkan ke IDE. IDE juga merupakan mekanisme untuk membuat ErrorInfo objek.
Panduan umum
Anda juga dapat menggunakan SetErrorInfo metode dan ReportErrorInfo untuk mengatur dan melaporkan kesalahan yang bersifat internal untuk implementasi VSPackage Anda. Namun, sebagai aturan umum, ikuti panduan ini untuk menangani pesan kesalahan di VSPackage Anda:
Terapkan
ISupportErrorInfodi objek VSPackage COM Anda.Buat mekanisme pelaporan kesalahan yang memanggil SetErrorInfo metode dalam objek yang mengimplementasikan IOleCommandTarget.
Biarkan IDE menampilkan kesalahan kepada pengguna melalui ReportErrorInfo metode .
Informasi kesalahan dalam IDE
Aturan berikut menunjukkan cara menangani informasi kesalahan di IDE Visual Studio:
Sebagai strategi defensif untuk menjamin bahwa info kesalahan kedaluwarsa tidak dilaporkan kepada pengguna, fungsi yang memanggil ReportErrorInfo metode harus terlebih dahulu memanggil metode .SetErrorInfo
nullTeruskan untuk menghapus pesan kesalahan cache sebelum memanggil apa pun yang mungkin mengatur informasi kesalahan baru.Fungsi yang tidak secara langsung melaporkan pesan kesalahan hanya diizinkan untuk memanggil SetErrorInfo metode jika mengembalikan kesalahan
HRESULT. Diperbolehkan untuk menghapusErrorInfopada entri ke fungsi atau saat mengembalikan S_OK. Satu-satunya pengecualian untuk aturan ini adalah ketika panggilan mengembalikan kesalahanHRESULTdari mana pihak penerima dapat secara eksplisit memulihkan atau mengabaikan dengan aman.Setiap pihak yang secara eksplisit mengabaikan kesalahan
HRESULTharus memanggil SetErrorInfo metode dengan S_OK. Jika tidak,ErrorInfoobjek mungkin secara tidak sengaja digunakan ketika pihak lain menghasilkan kesalahan tanpa menyediakannya sendiriErrorInfo.Semua metode yang berasal dari kesalahan
HRESULTdidorong untuk memanggil SetErrorInfo metode untuk memberikan informasi kesalahan yang kaya. Jika yang dikembalikanHRESULTadalah kesalahan khususFACILITY_ITF, maka metode diperlukan untuk menyediakan objek yang tepatErrorInfo. Jika kesalahan yang dikembalikan adalah kesalahan sistem standar (misalnya, , E_OUTOFMEMORY, E_ABORT, E_UNEXPECTEDE_INVALIDARG, , dan sebagainya.) dapat diterima untuk mengembalikan kode kesalahan tanpa secara eksplisit memanggil SetErrorInfo metode . Sebagai strategi pengodean defensif, ketika berasal dari kesalahanHRESULT(termasuk kesalahan sistem), selalu panggil SetErrorInfo metode , baik denganErrorInfomenjelaskan kegagalan secara lebih rinci, ataunull.Semua fungsi yang mengembalikan kesalahan yang berasal dari panggilan lain harus meneruskan informasi yang diterima dari panggilan yang gagal di
HRESULTtanpa mengubahErrorInfoobjek.