Как возвратить в Delphi изменяемые п-ры Гал. функции?

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
Dmitry_Sol
Постоянный гость
Сообщения: 76
Зарегистрирован: 07 июн 2007, 12:32
Откуда: Витебск
Контактная информация:

Как возвратить в Delphi изменяемые п-ры Гал. функции?

Сообщение Dmitry_Sol »

Мы реализуем взаимодействие программы для работы со сканерами штрих-кодов, работающих по беспроводной сети с системой Галактика.
Для этого мы на 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.
Delfi код

Код: Выделить всё

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;
Semi-bit
Постоянный обитатель
Сообщения: 123
Зарегистрирован: 01 фев 2007, 12:45
Откуда: Магнитогорск
Контактная информация:

Re: Как возвратить в Delphi изменяемые п-ры Гал. функции?

Сообщение Semi-bit »

Скорее всего, проблема в Delphi. Попробуйте применить раннее связывание. Или процедурой оформить.
Испытываю траблы с даблами
ВИП — Велосипедо-Изобретательская Парадигма
САППОРТ — Сборище Абсолютно Пустых Посредственно Образованных Ржущих Троллей
Ответить