Цитата:
Изначально опубликовано mpogorelov
приведи пожалуйста пример как ты это делал
PHP код:
class Application extends xApplication
{
..........
// aa_dav
BarcodeScanner BarcodeScanner;
}
void startupPost()
{
WorkplaceParameters WorkplaceParameters; // aa_dav
....................
// aa_dav
WorkplaceParameters = WorkplaceParameters::findOrCreate();
if ( WorkplaceParameters.BarcodeScannerExists == NoYes::Yes )
{
BarcodeScanner = new BarcodeScanner( WorkplaceParameters );
BarcodeScanner.proceedTimer();
}
}
Код самого класса
PHP код:
public class BarcodeScanner extends Object
{
COM oposScanner;
}
void proceedTimer()
{
this.setTimeOut( "checkDevice", 1000 );
}
void new( WorkplaceParameters WorkplaceParameters )
{
int regKey;
#WinAPI
;
super();
oposScanner = null;
if ( WorkplaceParameters.BarcodeScannerExists == NoYes::Yes )
{
try
{
regKey = WinAPI::regOpenKey( #HKEY_CLASSES_ROOT,
"AxaptaOposScannerLib.AxaptaOposScanner", #KEY_READ );
if ( regKey )
{
oposScanner = new COM( "AxaptaOposScannerLib.AxaptaOposScanner" );
oposScanner.Open();
if ( oposScanner.ErrorMsg() != "" )
{
error( "Ошибка инициализации сканнера штрих-кодов: " + oposScanner.ErrorMsg() );
oposScanner.finalize();
oposScanner = null;
}
// Release registry resource
WinAPI::closeRegistry( regKey );
}
else
{
error( "Не зарегистрирован COM-объект сканнера штрих-кодов!" );
}
}
catch
{
// Ignore errors
oposScanner = null;
}
}
}
void checkDevice()
{
Object o;
ObjectIdent oi;
TreeNode tn, rtn;
TreeNodeIterator it;
xInfo xInfo = new xInfo();
int i;
;
this.proceedTimer();
if ( oposScanner != null )
{
if ( oposScanner.DeviceEnabled() == false )
{
// Reactivate scanner
oposScanner.DeviceEnabled( true );
oposScanner.DataEventEnabled( true );
// Proceed with attention...
oi = infolog.parmLastActivatedForm();
if ( oi )
{
o = oi.object();
if ( o )
{
tn = o.form();
rtn = xInfo.findNode( "\\Forms\\" );
rtn = rtn.AOTfindChild( tn.AOTname() );
tn = rtn;
if ( tn )
{
tn = tn.AOTfindChild( "Methods" );
if ( tn )
{
tn = tn.AOTfindChild( "ActivateBarcode" );
if ( tn )
{
try
{
o.ActivateBarcode( removeLRSpaces( oposScanner.ScanData() ) );
}
catch
{ }
}
}
}
}
}
}
}
}
Кстати - возможно еще что твой объект создаётся на сервере в 3-х звеньевой архитектуре, обязательно проставь ему RunOn в Client.