Для этого мы на vip написали объектный интерфейс, вызывавемый из программы взаимодействия со сканерами.
Столкнулись с такой проблемой: Объектная функция не возвращает значения в возвращаемые параметры, хотя результат работы функции - возвращает.
Нам нужно возвращать значения именно пакетом. Возможно есть еще вариант реализации данной задачи?
Наш Пример (для наглядности его пришло прилично упростить):
//================= Объекный интерфейс - вызываемый из программы взаимодействия со сканерами штрих-кодов ============
Код: Выделить всё
#component "C_Partner"
ObjInterface oSrvScanOBJ;
 function  InitFlag   : word;
 function  Device(var ip:string;	 var F01:string;	 var F02:string;	 var F03:string;):string;
end;
VipInterface oSrvScan implements oSrvScanObj;
interface oSrvScan;
Create view;
function InitFlag:word;
{
  InitFlag:=1;
}
function Device(var ip:string;	 var F01:string;	 var F02:string;	 var F03:string;):string;
{
  f01:='field1';
  f02:='field2';
  f03:='field3';
  Device:='Divice is ok!';
}
end.
Код: Выделить всё
Procedure  InitGal;
Var
  galAPP:OleVariant; //Галактика
  iscan: Olevariant;  //интерфейс oSrvScan
  iw:word;
  res,ipd,f1,f2,f3:string;
begin
    // перед запуском зарегистрировали галактику как Automation - сервер
    alAPP:=createOleObject('atlexec.app');
	iscan:=GalApp.LoadVip('c_partner::oSRVScan') ;
	iw:=iscan.initflag;
	// значение iw после запуска  - 1
    ipd:='0001';
   	f1:='1';
	f2:='2';
	f3:='3';
    // после вызова iscan.device ,
	// должно быть : res = 'Divice is ok!'
	// f1='field1', f2='field2', f3='field3'
	showmessage('До вызова '+ipd+' , '+f1+' , '+f2+' , '+f3 );
     res:=iscan.device(ipd,f1,f2,f3);
    // возвращается  значение верно равное 'Device is ok!', но f1, f2 и f3 (параметры функции) - остаются неизменными.
	showmessage('после вызова '+ipd+' , '+f1+' , '+f2+' , '+f3 );
	iscan:=unassigned;
	galAPP:=unassigned;
end;