Как описать функцию

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

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

Ответить
spn
Новичок
Сообщения: 24
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Удмуртия ЗАО "Митра-Информ"
Контактная информация:

Как описать функцию

Сообщение spn »

Подскажите, как я могу описать свою функцию, чтобы она была доступна из любой части Галки(например в вычислителе по Alt+F4). Т.е. хочеться написать свой extfun.res.
Если пишу просто:
Function SubStringByChar(str : String; ch : Char; nPos : Integer) : String;
Begin
.....
End;
то компилироваться не хочет, если тоже самое всавить в часть интерфейса, то компилируется, но использовать можно только внутри его.
Deinis
Местный житель
Сообщения: 783
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва
Контактная информация:

Re: Как описать функцию

Сообщение Deinis »

Если я правильно понимаю, ты хочешь сделать свою public-функцию. По-моему мнению, в Галактике этого сделать нельзя.
ecasoft
Местный житель
Сообщения: 645
Зарегистрирован: 29 мар 2005, 17:49
Откуда: г.Королев МО ООО "Эффективная Комплексная Автоматизация- СОФТ"

Re: Как описать функцию

Сообщение ecasoft »

Вроде сделать нельзя без перекомпиляции модулей Паскаля Галактики.

Дело в том, что в указанном ресурсе хранится только ОБЪЯВЛЕНИЕ функции, а не сама функция.
Некоммерческое общение в форуме
spn
Новичок
Сообщения: 24
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Удмуртия ЗАО "Митра-Информ"
Контактная информация:

Re: Как описать функцию

Сообщение spn »

А нельзя скомпилить dll, а потом как-нибудь ее присоединить через ресурсный файл?
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Как описать функцию

Сообщение Den »

На форуме уже писалось об этом. Вроде так делали :

файл vip.prj:
Function lalala(longint):String;external 'lllll.dll';

#make "nnn.frm"
#make "nnn.vip"

И еще dll-лю необходимо покласть в \exe Галактики.
Maverick
Абориген
Сообщения: 943
Зарегистрирован: 29 мар 2005, 17:49
Откуда: External Developer
Контактная информация:

Re: Как описать функцию

Сообщение 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;

Вот собсно и все... Удачи
Изображение
Знающий людей разумен.
Знающий себя просветлён.
Побеждающий людей силен.
Побеждающий самого себя могущественнен
shuma
Постоянный гость
Сообщения: 76
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Воронеж
Контактная информация:

Re: Как описать функцию

Сообщение shuma »

2 Maverick: спасибо за описание и пример. Это как раз то, что нужно. Сработало ;D
Sheinina
Местный житель
Сообщения: 366
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Сообщение Sheinina »

Господа, прошу помощи!
Сделала все, как описано в послании Maveric, скомпилировалось без ошибок... Однако при попытке запуска получила "Объект не найден в ресурсном файле" :sad:
Alexey
Сообщения: 9
Зарегистрирован: 08 фев 2006, 13:26
Откуда: Прокопьевск

Сообщение Alexey »

Господа, объясните, как вообще делать компиляцию? :???: Я новичок и мне непонятен сам процесс... :???: Объясните по шагам.
Можно литературу подбросить на эту тему.
Спасибо :smile: !
san
Местный житель
Сообщения: 412
Зарегистрирован: 28 апр 2005, 11:34
Откуда: Галактика Млечный Путь

Сообщение san »

Maverick
пример по ctrl-f4 будет работать?
Screw
Слесарь-системщик
Сообщения: 304
Зарегистрирован: 29 мар 2005, 17:49
Откуда: р.Беларусь, Унитарное предприятие "ТОП СОФТ"
Контактная информация:

Сообщение Screw »

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