Страница 1 из 1
					
				Как описать функцию
				Добавлено: 18 июн 2003, 16:06
				 spn
				Подскажите, как я могу описать свою функцию, чтобы она была доступна из любой части Галки(например в вычислителе по Alt+F4). Т.е. хочеться написать свой extfun.res.
Если пишу просто:
Function SubStringByChar(str : String; ch : Char; nPos : Integer) : String;
Begin
 .....
End;
то компилироваться не хочет, если тоже самое всавить в часть интерфейса, то компилируется, но использовать можно только внутри его.
			 
			
					
				Re: Как описать функцию
				Добавлено: 18 июн 2003, 17:16
				 Deinis
				Если я правильно понимаю, ты хочешь сделать свою public-функцию. По-моему мнению, в Галактике этого сделать нельзя.
			 
			
					
				Re: Как описать функцию
				Добавлено: 19 июн 2003, 09:47
				 ecasoft
				Вроде сделать нельзя без перекомпиляции модулей Паскаля Галактики.
Дело в том, что в указанном ресурсе хранится только ОБЪЯВЛЕНИЕ функции, а не сама функция.
			 
			
					
				Re: Как описать функцию
				Добавлено: 19 июн 2003, 12:00
				 spn
				А нельзя скомпилить dll, а потом как-нибудь ее присоединить через ресурсный файл?
			 
			
					
				Re: Как описать функцию
				Добавлено: 19 июн 2003, 12:55
				 Den
				На форуме уже писалось об этом. Вроде так делали :
файл vip.prj:
Function lalala(longint):String;external 'lllll.dll'; 
#make "nnn.frm"
#make "nnn.vip"
И еще dll-лю необходимо покласть в \exe Галактики.
			 
			
					
				Re: Как описать функцию
				Добавлено: 21 июн 2003, 08:18
				 Maverick
				>>Если я правильно понимаю, ты хочешь сделать свою public-функцию. По-моему мнению, в Галактике этого сделать нельзя>>
Вот здесь ты е прав! Есть спец интерфейсы, называемые объектными, в которых можно описать паблик-функции и процедуры, которые "видны" в любом запускаемом интерфейсе.
Пример:
Файло 1 - DeptIer.vip - исходник интерфейса
#include DeptIer.vih
interface DepartIer  cacheable;
Create view DepartIer
as  select
DepCat.NRec
From
  StafUser,
  Synonym Catalogs DepCat
Where (( UserName == StafUser.StUser ));
Function GetFulDepName(DepCatNRec : comp) : string;
{ // Возвращает полное название подразделения с учетом уровня иерарархии
  // Уровень иерархии хранится в StafUser.rNum2
  // Устанавливается База данных->Общесистемные установки -- Приказы
  var tmpStr          : string;
  var parentNRec      : comp;
  var countIer        : longInt;
  var i               : longInt;
if (DepCatNRec = 0)
    {
    GetFulDepName := '';
    exit;
    }
countIer := longint(StafUser.rNum2);
if (modifier GetFirst DepCat where ((DepCatNRec == DepCat.NRec)) = tsOk)
    {
    parentNRec := DepCat.cParent;
    tmpStr := DepCat.Name;
    }
if (countIer < 2) // В иерархии 1 подразделение
    {
    GetFulDepName := tmpStr;
    exit;
    }
i := 1;
  while (i < countIer and DepCat.SysCode <> -11)
    {
    if (modifier GetFirst DepCat where ((parentNRec == DepCat.NRec)) = tsOk)
      {
      if (DepCat.SysCode <> -11)
        tmpStr := DepCat.Name + '\' + tmpStr;
      parentNRec := DepCat.cParent;
      i := i + 1;
      }
    }
  GetFulDepName := tmpStr;
} // end function GetFulDepName
END.
Теперь файло 2 DeptIer.vih - описание объектного интерфейса
objinterface ObjDepartIer;
public function GetFulDepName(DepCatNRec : comp): string;
end;
vipinterface DepartIer implements ObjDepartIer;
Вот собсно это уже можно компилить.
Чтобы заюзать ф-ю GetFulDepName(DepCatNRec) в другом интере, достаточно 
а) в исходник своего интера первой строкой вставить #include DeptIer.vih
б) и самом интерфейсе объявить  
Var MyDep : DepartIer; //переменная типа интерфейс DepartIer
в) в самом интерфейсе описанная ф-я будет доступна как MyDep.GetFulDepName(comp) : string;
Вот собсно и все... Удачи
			 
			
					
				Re: Как описать функцию
				Добавлено: 12 апр 2004, 16:20
				 shuma
				2 Maverick: спасибо за описание и пример. Это как раз то, что нужно. Сработало ;D
			 
			
					
				
				Добавлено: 22 дек 2005, 19:55
				 Sheinina
				Господа, прошу помощи!
Сделала все, как описано в послании Maveric, скомпилировалось без ошибок... Однако при попытке запуска получила "Объект не найден в ресурсном файле" 

 
			 
			
					
				
				Добавлено: 09 фев 2006, 09:36
				 Alexey
				Господа, объясните, как вообще делать компиляцию?  

  Я новичок и мне непонятен сам процесс...  

  Объясните по шагам. 
Можно литературу подбросить на эту тему. 
Спасибо  

 !
 
			 
			
					
				
				Добавлено: 09 фев 2006, 10:53
				 san
				Maverick
пример по ctrl-f4 будет работать?
			 
			
					
				
				Добавлено: 25 фев 2006, 21:00
				 Screw
				Единственная возможность реализовать подобное - это написать стороннюю dll-ку, экспортирующую нужную функцию, и  скомпилировать описание функции в подключаемый при старте Галактики ресурс. 
На чистом vip сделать похожее невозможно. Максимум, чего можно добиться - это реализовать т.н. библиотеки функций (только 5-й Атлантис). Но Вычислитель Выражений этих дел всё равно не понимает.