Гость
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как правильно написать определение внешней ф-ии / 15 сообщений из 15, страница 1 из 1
11.10.2009, 20:27
    #36244520
roleks
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно написать определение внешней ф-ии
Вот есть такой вот пример на делфи

procedure PrinterResults(const rt:RetData)stdcall;

function OpenFiscalReceipt(hWin:HWND; fun:TMathFunc; par:LPARAM;i1: DWORD;i2: LPSTR;i3:
DWORD;i4: Boolean):integer;stdcall;external 'fpl.dll' name 'OpenFiscalReceipt';

Т.е вторым аргументом второй ф-ии есть первая


Вот мои изголяния на ПБ

SUBROUTINE PrinterResults( ref retdata rt) RPCFUNC ; - тут вроде должно быть правильно
а вот вторую никак не получается правильно написать - ругается компилятор и все

function int OpenFiscalReceipt(integer hWin, PrinterResults(), long par, UnsignedLong i1, string i2, UnsignedLong i3, boolean i4) library 'fpl.dll' alias for 'OpenFiscalReceipt';
...
Рейтинг: 0 / 0
11.10.2009, 20:44
    #36244536
Как правильно написать определение внешней ф-ии
НУ наверное примерно так

function int OpenFiscalReceipt(integer hWin, integer PrinterResults, long par, UnsignedLong i1, string i2, UnsignedLong i3, boolean i4) library 'fpl.dll'


----------------

function int OpenFiscalReceipt(integer hWin, PrinterResults() , long par, UnsignedLong i1, string i2, UnsignedLong i3, boolean i4) library 'fpl.dll' alias for 'OpenFiscalReceipt' ;

А это что?
PrinterResults()

А это что
;
...
Рейтинг: 0 / 0
11.10.2009, 21:34
    #36244559
roleks
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно написать определение внешней ф-ии
Гриценко А.В.НУ наверное примерно так

function int OpenFiscalReceipt(integer hWin, integer PrinterResults, long par, UnsignedLong i1, string i2, UnsignedLong i3, boolean i4) library 'fpl.dll'


----------------

function int OpenFiscalReceipt(integer hWin, PrinterResults() , long par, UnsignedLong i1, string i2, UnsignedLong i3, boolean i4) library 'fpl.dll' alias for 'OpenFiscalReceipt' ;

А это что?
PrinterResults()

А это что
;

так PrinterResults это же процедура а не тип данных
В этом то и вся проблема
...
Рейтинг: 0 / 0
12.10.2009, 10:09
    #36244938
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно написать определение внешней ф-ии
roleksВот есть такой вот пример на делфи

procedure PrinterResults(const rt:RetData)stdcall;

function OpenFiscalReceipt(hWin:HWND; fun:TMathFunc; par:LPARAM;i1: DWORD;i2: LPSTR;i3:
DWORD;i4: Boolean):integer;stdcall;external 'fpl.dll' name 'OpenFiscalReceipt';

Т.е вторым аргументом второй ф-ии есть первая

Из того что приведено - это две совершенно никак не связанные функции. Где определение TMathFunc?
...
Рейтинг: 0 / 0
12.10.2009, 10:19
    #36244966
roleks
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно написать определение внешней ф-ии
Локшин МаркroleksВот есть такой вот пример на делфи

procedure PrinterResults(const rt:RetData)stdcall;

function OpenFiscalReceipt(hWin:HWND; fun:TMathFunc; par:LPARAM;i1: DWORD;i2: LPSTR;i3:
DWORD;i4: Boolean):integer;stdcall;external 'fpl.dll' name 'OpenFiscalReceipt';

Т.е вторым аргументом второй ф-ии есть первая

Из того что приведено - это две совершенно никак не связанные функции. Где определение TMathFunc?


а они и не связаны
просто из второй вызывается первая
а TMathFunc -этостандартный тип в делфи
...
Рейтинг: 0 / 0
12.10.2009, 11:15
    #36245144
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно написать определение внешней ф-ии
PB не поддерживает указатели на ф-и (колбэки) в качестве аргументов external functions.

Тут есть 3 варианта развития событий:

1) Если вдруг повезло и OpenFiscalReceipt умеет принимать NULL вместо колбэка и игнорировать его, тогда этот аргумент можно описать как long и передавать туда 0.
Естественно если колбэк используется для возврата результата ф-и, а не только для уведомлений, то этот вариант не пройдет.

2) Написать на C/C++ обертку в которой поместить этот колбэк и потом отдельным вызовом как-то передать в PB полученные через него данные.

3) Специально для подобных случаев я написал библиотеку , которая помимо прочего умеет таки вызывать external functions с колбэками в качестве аргументов :)
Но она к сожалению платная.

ЗЫ. RPCFUNC - это вообще не в ту степь.
...
Рейтинг: 0 / 0
12.10.2009, 11:24
    #36245177
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно написать определение внешней ф-ии
roleksа они и не связаны
просто из второй вызывается первая
а TMathFunc -этостандартный тип в делфи
Если из второй вызывается первая, то зачем нужно ее каким-то образом запихивать в параметры второй? Это какая-то бесконечная рекурсия у Вас получается. Вы уж разберитесь кто на ком стоял. При этом совершенно не ясно что нужно передать в качестве параметра и где там фигурирует тип TMathFunc.
Второй параметр наверное нужно описывать как ulong - это указатель. При том, если почитать интернет, то вроде утверждается что там долен быть указатель на callback функцию, что только средствами PB не реализуется (если в этой функции нужно хоть что-то делать).
И вообще, что все должны наизусть знать описание TMathFunc, здесь же не форум по Delphi?
...
Рейтинг: 0 / 0
12.10.2009, 15:59
    #36245981
roleks
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно написать определение внешней ф-ии
Anatoly MoskovskyPB не поддерживает указатели на ф-и (колбэки) в качестве аргументов external functions.

Тут есть 3 варианта развития событий:

1) Если вдруг повезло и OpenFiscalReceipt умеет принимать NULL вместо колбэка и игнорировать его, тогда этот аргумент можно описать как long и передавать туда 0.
Естественно если колбэк используется для возврата результата ф-и, а не только для уведомлений, то этот вариант не пройдет.

2) Написать на C/C++ обертку в которой поместить этот колбэк и потом отдельным вызовом как-то передать в PB полученные через него данные.

3) Специально для подобных случаев я написал библиотеку , которая помимо прочего умеет таки вызывать external functions с колбэками в качестве аргументов :)
Но она к сожалению платная.

ЗЫ. RPCFUNC - это вообще не в ту степь.
Скорее всего буду 2 вариант оиспользовать
спасибо
...
Рейтинг: 0 / 0
12.10.2009, 18:10
    #36246370
spas2001
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно написать определение внешней ф-ии
to Anatoly Moskovsky
Это про это имелось ввиду, когда говорилось о теплом пляже
-----------------------------------------------------------------------------
Главная деталь любой машины - голова ее владельца
...
Рейтинг: 0 / 0
12.10.2009, 20:35
    #36246602
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно написать определение внешней ф-ии
spas2001to Anatoly Moskovsky
Это про это имелось ввиду, когда говорилось о теплом пляже

Ну так я ж осуществил свое обещание :)
Я даже весь июнь каждый день ходил на пляж (чего не бывало за все 15 лет сколько я живу в Одессе). А потом как-то расхотелось :)
...
Рейтинг: 0 / 0
12.10.2009, 20:37
    #36246605
Dmitry..
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно написать определение внешней ф-ии
я-бы попробовал объявить так:

function int OpenFiscalReceipt(LONG hWin, LONG fun, LONG par, LONG i1, STRING i2, LONG i3, boolean i4) library 'fpl.dll' alias for 'OpenFiscalReceipt';

как передавать fun:
думаю что надо надо опубликовать из делфей еще одну ф-ю (getPrinterResultsAddr) которая будет возвращать
Addr (PrinterResults);
--
PS: не уверен что будет работать ;)
...
Рейтинг: 0 / 0
13.10.2009, 00:05
    #36246827
spas2001
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно написать определение внешней ф-ии
To Dmitry..
+1
-----------------------------------------------------------------------------
Главная деталь любой машины - голова ее владельца
...
Рейтинг: 0 / 0
13.10.2009, 09:55
    #36247103
roleks
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно написать определение внешней ф-ии
Dmitry..я-бы попробовал объявить так:

function int OpenFiscalReceipt(LONG hWin, LONG fun, LONG par, LONG i1, STRING i2, LONG i3, boolean i4) library 'fpl.dll' alias for 'OpenFiscalReceipt';

как передавать fun:
думаю что надо надо опубликовать из делфей еще одну ф-ю (getPrinterResultsAddr) которая будет возвращать
Addr (PrinterResults);
--
PS: не уверен что будет работать ;)


что то я не понял немного
...
Рейтинг: 0 / 0
13.10.2009, 11:01
    #36247328
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно написать определение внешней ф-ии
roleksчто то я не понял немного
Это вариация п.2 из моего списка.
Т.е. все равно требуется написание колбэка на другом языке.
Единственное - я не вижу особого смысла в добавлении доп действий (получение адреса колбэка в PB).
Сравните:

- C++, declare OpenFiscalReceiptWrapper
- C++, declare PrinterResults
- C++, declare GetPrinterResults
- PB, declare external OpenFiscalReceiptWrapper
- PB, declare external GetPrinterResults
- PB, call OpenFiscalReceiptWrapper
- PB, call GetPrinterResults

и

- C++, declare GetPrinterResultsAddr
- C++, declare PrinterResults
- C++, declare GetPrinterResults
- PB, declare external GetPrinterResultsAddr
- PB, declare external OpenFiscalReceipt
- PB, declare external GetPrinterResults
- PB, call GetPrinterResultsAddr
- PB, call OpenFiscalReceipt
- PB, call GetPrinterResults
...
Рейтинг: 0 / 0
13.10.2009, 20:43
    #36248976
Dmitry..
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно написать определение внешней ф-ии
в соседнем форуме нашел что аФтор хочет:
/topic/703023#7777302
...
Рейтинг: 0 / 0
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как правильно написать определение внешней ф-ии / 15 сообщений из 15, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]