Как описать функцию
Модераторы: m0p3e, edward_K, Модераторы
-
- Новичок
- Сообщения: 24
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Удмуртия ЗАО "Митра-Информ"
- Контактная информация:
Как описать функцию
Подскажите, как я могу описать свою функцию, чтобы она была доступна из любой части Галки(например в вычислителе по Alt+F4). Т.е. хочеться написать свой extfun.res.
Если пишу просто:
Function SubStringByChar(str : String; ch : Char; nPos : Integer) : String;
Begin
.....
End;
то компилироваться не хочет, если тоже самое всавить в часть интерфейса, то компилируется, но использовать можно только внутри его.
Если пишу просто:
Function SubStringByChar(str : String; ch : Char; nPos : Integer) : String;
Begin
.....
End;
то компилироваться не хочет, если тоже самое всавить в часть интерфейса, то компилируется, но использовать можно только внутри его.
-
- Местный житель
- Сообщения: 783
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Москва
- Контактная информация:
Re: Как описать функцию
Если я правильно понимаю, ты хочешь сделать свою public-функцию. По-моему мнению, в Галактике этого сделать нельзя.
-
- Местный житель
- Сообщения: 645
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: г.Королев МО ООО "Эффективная Комплексная Автоматизация- СОФТ"
Re: Как описать функцию
Вроде сделать нельзя без перекомпиляции модулей Паскаля Галактики.
Дело в том, что в указанном ресурсе хранится только ОБЪЯВЛЕНИЕ функции, а не сама функция.
Дело в том, что в указанном ресурсе хранится только ОБЪЯВЛЕНИЕ функции, а не сама функция.
Некоммерческое общение в форуме
-
- Новичок
- Сообщения: 24
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Удмуртия ЗАО "Митра-Информ"
- Контактная информация:
Re: Как описать функцию
А нельзя скомпилить dll, а потом как-нибудь ее присоединить через ресурсный файл?
-
- Местный житель
- Сообщения: 1844
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: Как описать функцию
На форуме уже писалось об этом. Вроде так делали :
файл vip.prj:
Function lalala(longint):String;external 'lllll.dll';
#make "nnn.frm"
#make "nnn.vip"
И еще dll-лю необходимо покласть в \exe Галактики.
файл vip.prj:
Function lalala(longint):String;external 'lllll.dll';
#make "nnn.frm"
#make "nnn.vip"
И еще dll-лю необходимо покласть в \exe Галактики.
-
- Абориген
- Сообщения: 943
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: External Developer
- Контактная информация:
Re: Как описать функцию
>>Если я правильно понимаю, ты хочешь сделать свою 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;
Вот собсно и все... Удачи
Вот здесь ты е прав! Есть спец интерфейсы, называемые объектными, в которых можно описать паблик-функции и процедуры, которые "видны" в любом запускаемом интерфейсе.
Пример:
Файло 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;
Вот собсно и все... Удачи
-
- Постоянный гость
- Сообщения: 76
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Воронеж
- Контактная информация:
Re: Как описать функцию
2 Maverick: спасибо за описание и пример. Это как раз то, что нужно. Сработало ;D
-
- Слесарь-системщик
- Сообщения: 304
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: р.Беларусь, Унитарное предприятие "ТОП СОФТ"
- Контактная информация:
Единственная возможность реализовать подобное - это написать стороннюю dll-ку, экспортирующую нужную функцию, и скомпилировать описание функции в подключаемый при старте Галактики ресурс.
На чистом vip сделать похожее невозможно. Максимум, чего можно добиться - это реализовать т.н. библиотеки функций (только 5-й Атлантис). Но Вычислитель Выражений этих дел всё равно не понимает.
На чистом vip сделать похожее невозможно. Максимум, чего можно добиться - это реализовать т.н. библиотеки функций (только 5-й Атлантис). Но Вычислитель Выражений этих дел всё равно не понимает.
Виталий