Страница 1 из 1

Можно ли использовать данные из внешних программ?

Добавлено: 28 ноя 2005, 11:33
scanner
Галактика 7.12.
Хочу осуществить следующее, пишем программку (например на Delphi), затем при формировании отчета вызываем нашу программку и она должна возвратить данные в наш отчет для дальнейшего использования. Для простоты будем считать что нужно возвратить всего одну текстовую строку.

Подскажите как это осуществить и возможно ли такое.

Добавлено: 28 ноя 2005, 11:42
Алексей
Ну запуск внешней программы возможен.
А куда она должна вернуть эту самую строку?

Можно записать текстовый файл, а ВИПом читать этот текстовый файл.

Добавлено: 28 ноя 2005, 11:48
scanner
Желательно не использовать промежкточный файл, а возвратить строку допустим в переменную отчета. Но если этого нельзя то придеться через файл.

Да еще никто не слышал о возможности написания интерфейсов сторонними средствами без использования компилятора ВИП?

Добавлено: 28 ноя 2005, 12:33
scanner
Да еще можно ли передать внешней программе данные из отчета? Например вю ту же текстовую строку. Сначала передаем внешней программе, пользоветель ее меняет и возвращаем в отчет. После этого отчет выводится на экран.

Добавлено: 28 ноя 2005, 13:26
coolibin
Просто для наводки (сам не пробовал):
Документация - "Использование ActiveX"

Функционал очень клевый, судя по документации, можно даже реализовать обработчики событий на випе.
Если кто делал - поделитесь опытом плиз, думаю многим будет интересно. В частности, интересна работа с ADODB.recordset

Добавлено: 29 ноя 2005, 16:51
mik
пишем свою DLL, в которой живет нужная функция.
подключаем ее к VIP программе и наслаждаемся 8-)

Добавлено: 30 ноя 2005, 06:02
scanner
mik
Если можно дайте развернутый пример.

Добавлено: 30 ноя 2005, 06:50
mik
это текст qwerty.dll

library qwerty;

function GetPi:Double;register;
begin
result := 3.14;
end;
exports
GETPI;
begin
end;

а это вип прога:

Function GETPI:Double;external 'qwerty.dll';

interface qwerty 'qwerty'
//....
// тут что то свое
//...
procedure ShowPi;
begin
message('2Pi' + String(2*GetPi));
end;


HandleEvent
cmInit:{ShowPi;}
end;
end.

Добавлено: 30 ноя 2005, 06:54
scanner
mik
Т.е. если я все правильно понял на випе можно использовать даже те же API функции предварительно их объявив?

Т.е. можно создать окошко: CreateWindowA, SetWindowLongA, ect.

Добавлено: 30 ноя 2005, 07:11
mik
есть некоторые ограничения.
строки в Vip паскалевские ShortString в дос кодировке(cp866)
процедуры и функции должны быть объявлены как register.
раньше было такое что название процедур/функций должны были описываться в верхнем регистре.

А для ADODB.Recordset я нарисовал в дллке ряд функций оберток, которые дают доступ к свойствам и методам TADOQuery.

Добавлено: 30 ноя 2005, 07:19
scanner
mik
что значит
процедуры и функции должны быть объявлены как register
?

Да еще насколько я понимаю нет разницы где использовать ф-ии в отчетах или интерфейсах?

Добавлено: 30 ноя 2005, 07:36
mik
вообще говоря register - соглашение о вызове процедур и функций используется в делфи по умолчанию.

если отчет или интерфейс сможет узнать о существовании функции то использовать конечно можно и там и сям :smile:


[/quote]