- このトピックは空です。
-
投稿者投稿
-
2021年6月30日 9:21 AM #922
佐久間
ゲストいつもお世話になっております。
すいませんが教えて頂けないでしょうか。以前、Visual C++ の作成について教えて頂いたのですが、
この処理上で、レポート上に、オブジェクトが存在するかどうかを、例外処理に行く前に判定を行なう事ができないでしょうか?
現在、私の作成したプログラムでは、レポート上にオブジェクトが無い場合はセットをしないような処理になっていまして、例外処理で判定をしてしまうと大量の例外が発生する状況になってしまいました。(つまり、レポートにオブジェクトがある場合のみ、データをセットする方式となっています)
そうしますと、処理終了に時間がかかるだけでなく、coredump のウインドウ警告が出る事も有るみたいです。すいませんが、御回答をよろしくお願いします。
CWRReport objReport1;
CWRReport objReport2;
CWRPreview objPreview;
CString text;CWRLayer objLayer;
CWRObject objWRObj;
VARIANT val;try
{UpdateData(FALSE);
objReport1 = m_wr3axcl.LoadReport(“送付状.W30”);
//レイヤーオブジェクトを取得します
objLayer = objReport1.GetLayer( 1 ) ;//レポートをクリアします
objLayer.ClearData() ;//テキストオブジェクトを取得します
text = “wrtToShimei”;ZeroMemory( &val , sizeof(val) ) ;
val.vt = VT_BSTR; text.SetSysString( &val.bstrVal );
objWRObj = objLayer.WRObject(val); ←←←←←←←←←(☆この部分で例外に行ってしまいます☆)
//テキストオブジェクトに文字列をセットします
objWRObj.SetText( “株式会社 ソフトウィング” );/*フレームオブジェクト内のテキストオブジェクトを取得する場合には
オブジェクト名を “FrameObject名.TextObject名” と指定します。*////////////////////////////////////////////////
objPreview = m_wr3axcl.CreatePreview();
objPreview.OpenPreview( 1 ) ;
objPreview.ReportPrint( objReport1 );
objReport1.Delete() ;
}
catch( CException* Excption )
{text = m_wr3axcl.GetLastErrorText();
MessageBox( text ) ;
objReport1.Delete() ;
objPreview.Delete() ;
}
2021年6月30日 9:22 AM #923Hirayama
ゲストいつもお世話になっております。
WRObjectの引数にはオブジェクト名の他にインデックスを指定することが
できます。また、Layerオブジェクトにはそのレイヤー上にあるWRObjectの
個数を取得するObjectCountプロパティが用意されております。それにより
全WRObjectの名称比較を行い、オブジェクトの存在確認をする事が可能かと
思われます。以下に記述例を掲載します。CWRReport objReport ;
VARIANT Index;//レイヤー上に存在するオブジェクトの個数を取得します
int MaxCount = objReport.GetLayer(1).GetObjectCount() ;VariantInit(&Index);
Index.vt = VT_I4;
//全てのオブジェクトに対して名称比較を行います
for ( Index.intVal = 1 ; Index.intVal <= MaxCount; Index.intVal++ )
{if( objReport.GetLayer(1).WRObject(Index).GetName() == “オブジェクト名” )
{//存在を確認した場合の処理を記述します
}
}
以上宜しくお願い致します。
2021年6月30日 9:22 AM #924佐久間
ゲスト御回答ありがとうございました。
さっそく、プログラムに組み込んでみます。 -
投稿者投稿
- フォーラム「旧サポート掲示板」には新規投稿および返信を追加できません。