ロゴ:EPSON
ロゴ:よくあるご質問(FAQ)

製品別
質問別

URLをクリップボードにコピーしました
シェア用URL:https://faq2.epson.jp/web/Detail.aspx?id=31207
  FAQ番号:31207
イベントハンドラの注意事項<EPSON OPOS ADK シリーズ>
イベントハンドラ内でプロパティーにアクセスしたり、メソッドの実行をおこなったときに動作がおかしくなります。
 
 

イベントハンドラ内で、アプリケーションはプロパティにアクセスしたり、メソッドの呼び出しをおこなえます。
ただし、ReleaseDeviceメソッドやCloseメソッドをイベントハンドラ内から呼び出してはなりません。
正常に動作しなくなる原因となります。

 

OPOSはイベントを使用してOPOSコントロールでの様々な動作や変化をアプリケーションに通知します。
イベントには以下の 5つがあります。

  • DataEvent:
    入力デバイスからデータが送信されてきたときに通知します。
    入力データがデバイスクラス固有のプロパティに格納されています。
  • ErrorEvent:
    イベント駆動入力中または非同期出力中にエラーが発生したときに通知します。
  • StatusUpdateEvent:
    デバイスの状態(ステータス)変化を通知します。
  • OutputCompleteEvent:
    非同期出力が正常に完了したときに通知します。
  • DirectIOEvent:
    このイベントは、サービス オブジェクトの提供元によって定義され、独自のものを提供します。

これらのイベント内にて、ReleaseDeviceメソッドやCloseメソッドは使用できません。
ReleaseDeviceメソッドはイベントハンドリング(イベントを通知させるスレッドを含んでいる)を閉鎖してしまい、Closeは戻る前にイベントハンドリングを閉鎖しなければならないためです。

これらの内容は「OPOS 技術協議会 仕様書」を抜粋しています。
「OPOS 技術協議会 仕様書」は こちら から参照することができます。

イベント内にて、ReleaseDevice メソッドや Close メソッドが処理として含まれていないか確認してください。
また、イベント呼び出し時にデバイスクラスを解放(ReleaseDevice / Close メソッドの実行)させる方法はありません。

次のような処理を実行することが禁止されています。

例)Visual C++
//エラーイベント処理
void CPrinterDlg::OnErrorEventPosprinter1(long ResultCode,
					 long ResultCodeExtended,
					 long ErrorLocus,
					 long FAR* pErrorResponse) 
{
	long	lRet;
	CString sRC;
	CString sRCE;
	sRC.Format("ResultCode = %ld\n", ResultCode );
	sRCE.Format("ResultCodeExtended = %ld\n", ResultCodeExtended );
	lRet = MessageBox(
			"Printer Error.\n\n" + sRC + sRCE, 
			"ErrorEvent", 
			MB_ICONINFORMATION | MB_RETRYCANCEL );
	if( lRet == IDCANCEL )
	{
		*pErrorResponse = OPOS_ER_CLEAR;
	}
    //デバイスキャンセル
    m_Ptr1.SetDeviceEnabled( FALSE );
    //デバイス解放の実行
    m_Ptr1.ReleaseDevice();
    //デバイス使用の終了
    m_Ptr1.Close();
}
SASPORTシリーズ SASPORT ARCX,SASPORT Cubie,SASPORT CubieII,SASPORT CubieIII,SASPORT MR,SASPORT URBAN,SASPORT URBANII
モバイルプリンター TM-P20,TM-P60II
PC一体型プリンター TM-T70II-DT,TM-T88V-DT
キャッシュドロアー DLA-58EDIII,DM-Z100,DM-Z400,DMA-48EDIII,DSA-35EDIII
TMシリーズ TM-C100,TM-H5000II,TM-H6000II,TM-H6000III,TM-H6000IV,TM-J2000,TM-J2100,TM-L60II,TM-L90 オートカッターモデル,TM-L90 ピーラーモデル,TM-T20,TM-T20II,TM-T70,TM-T70II,TM-T88III,TM-T88IIIX (ARCX搭載),TM-T88IV,TM-T88V,TM-T90,TM-T90 KP,TM-T90II,TM-U220A,TM-U220B,TM-U220D,TM-U295,TM-U375,TM-U590,TM-U675,TM-U950
FAQ改善アンケート

このページの評価をお聞かせください。〇✖をお選びください。

 

■役に立った
■役に立たなかった