Для этого мы на 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;