Страница 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, скомпилировалось без ошибок... Однако при попытке запуска получила "Объект не найден в ресурсном файле" :sad:

Добавлено: 09 фев 2006, 09:36
Alexey
Господа, объясните, как вообще делать компиляцию? :???: Я новичок и мне непонятен сам процесс... :???: Объясните по шагам.
Можно литературу подбросить на эту тему.
Спасибо :smile: !

Добавлено: 09 фев 2006, 10:53
san
Maverick
пример по ctrl-f4 будет работать?

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