#Import の例外の発生のメカニズムを ActiveX データ オブジェクト (ADO) では、Visual C を交換する方法

重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。

英語版 KB:177425
この資料は、アーカイブされました。これは "現状のまま" で提供され、更新されることはありません。
メモ Microsoft Visual の C++。NET 2002 および Microsoft Visual の C++ です。NET 2003、Microsoft によって提供される両方のマネージ コード モデルをサポートします。NET Framework とアンマネージ ネイティブ Windows コード モデル。この資料の情報は、アンマネージ Visual C コードにのみ適用します。 Microsoft Visual の C++。NET の 2005年を両方ともサポートしていますがMicrosoft によって提供されるマネージ コード モデル。Net とはアンマネージ ネイティブ Windows コード モデル。
概要
#Import ステートメントを使用して、クライアントを作成するには例外、_com_error の例外を処理するアプリケーションを紹介します。ラッパーは、オブジェクトのメソッドを失敗の HRESULT を検出したときのクラスです。、このメカニズムを独自に置き換えるには、正当な理由がある可能性があります。実装します。
詳細
#Import を使用していないが発生するは、次の 2 つの方法があります。エラー HRESULT の例外です。使用する最初のつまり、raw_interfaces_only 句、#import ステートメントを使用します。ただし、これを否定します。#import を提供するラッパー クラスの利点のいくつか。

独自の実装を提供することで、2 番目の方法をあります。_com_raise_error では、次のプロトタイプを持ち、デフォルト実装:

   void __stdcall _com_raise_error(HRESULT hr, IErrorInfo* perrinfo = 0)   throw(_com_error);   void __stdcall   _com_raise_error(HRESULT hr, IErrorInfo* perrinfo = 0) throw(_com_error)   {       throw _com_error(hr, perrinfo);   }				
この関数は宣言しますが、Comdef.h ファイルに実装されていません。If独自の実装を提供します。OBJ ファイル、リンカーとして使用されます。Comsupp.lib を導入することにするのではなく、実装します。それをすることができます _com_raise_error Comsupp.lib ファイル内の独自のオブジェクトに存在します。簡単に、コードを交換してください。

次のサンプル実装を示します#import の例外が関数を生成します。

メモ: コンパイラが、関数を無視する現在例外の仕様と、次の警告が生成されます。

C4290 警告: C++ 例外の仕様は無視されます。
Atこの時点では、例外の仕様の実装の詳細されていません。標準化、および承認しますが、Microsoft Visual C では実装されていません。仕様を再コンパイルする必要があります、無視される例外でコンパイルされたコード再リンクする将来の例外の仕様をサポートするバージョン使用します。Warning プラグマを使用してこの警告を回避することができます。

#pragma warning( disable : 4290 ) 				

サンプル コード

   void __stdcall   _com_raise_error(HRESULT hr, IErrorInfo* perrinfo = 0) throw(_com_error)       {           //This message box is for demonstration purpose only.           AfxMessageBox( "_com_raise_error (HRESULT, IErrorInfo*)" );           //Your own error handling code or just an abort.       }    #import <msado15.dll>        ...     _bstr_t     bstrEmpty(L"");     _ConnectionPtr  Conn1 = NULL;     Conn1.CreateInstance( __uuidof( Connection ) );     Conn1->Open( bstrEmpty, bstrEmpty, bstrEmpty );				
このコードは、ActiveX データ オブジェクト (ADO) の接続を開くしようとしています。なく、任意の有効な接続情報を提供するオブジェクト。置換_com_raise_error、_com_error を発生を防止します。

警告: この記事は自動翻訳されています

プロパティ

文書番号:177425 - 最終更新日: 02/22/2014 06:55:09 - リビジョン: 6.0

  • kbnosurvey kbarchive kbhowto kbinfo kbdatabase kbmdacnosweep kbcompiler kbmt KB177425 KbMtja
フィードバック