powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как правильно написать определение внешней ф-ии
15 сообщений из 15, страница 1 из 1
Как правильно написать определение внешней ф-ии
    #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
Как правильно написать определение внешней ф-ии
    #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
Как правильно написать определение внешней ф-ии
    #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
Как правильно написать определение внешней ф-ии
    #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
Как правильно написать определение внешней ф-ии
    #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
Как правильно написать определение внешней ф-ии
    #36245144
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PB не поддерживает указатели на ф-и (колбэки) в качестве аргументов external functions.

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

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

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

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

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

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

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

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

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

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

Ну так я ж осуществил свое обещание :)
Я даже весь июнь каждый день ходил на пляж (чего не бывало за все 15 лет сколько я живу в Одессе). А потом как-то расхотелось :)
...
Рейтинг: 0 / 0
Как правильно написать определение внешней ф-ии
    #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
Как правильно написать определение внешней ф-ии
    #36246827
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To Dmitry..
+1
-----------------------------------------------------------------------------
Главная деталь любой машины - голова ее владельца
...
Рейтинг: 0 / 0
Как правильно написать определение внешней ф-ии
    #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
Как правильно написать определение внешней ф-ии
    #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
Как правильно написать определение внешней ф-ии
    #36248976
Dmitry..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в соседнем форуме нашел что аФтор хочет:
/topic/703023#7777302
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как правильно написать определение внешней ф-ии
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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