|
Как правильно написать определение внешней ф-ии
|
|||
---|---|---|---|
#18+
Вот есть такой вот пример на делфи 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'; ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2009, 20:27 |
|
Как правильно написать определение внешней ф-ии
|
|||
---|---|---|---|
#18+
НУ наверное примерно так 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() А это что ; ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2009, 20:44 |
|
Как правильно написать определение внешней ф-ии
|
|||
---|---|---|---|
#18+
Гриценко А.В.НУ наверное примерно так 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 это же процедура а не тип данных В этом то и вся проблема ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2009, 21:34 |
|
Как правильно написать определение внешней ф-ии
|
|||
---|---|---|---|
#18+
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? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2009, 10:09 |
|
Как правильно написать определение внешней ф-ии
|
|||
---|---|---|---|
#18+
Локшин Марк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 -этостандартный тип в делфи ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2009, 10:19 |
|
Как правильно написать определение внешней ф-ии
|
|||
---|---|---|---|
#18+
PB не поддерживает указатели на ф-и (колбэки) в качестве аргументов external functions. Тут есть 3 варианта развития событий: 1) Если вдруг повезло и OpenFiscalReceipt умеет принимать NULL вместо колбэка и игнорировать его, тогда этот аргумент можно описать как long и передавать туда 0. Естественно если колбэк используется для возврата результата ф-и, а не только для уведомлений, то этот вариант не пройдет. 2) Написать на C/C++ обертку в которой поместить этот колбэк и потом отдельным вызовом как-то передать в PB полученные через него данные. 3) Специально для подобных случаев я написал библиотеку , которая помимо прочего умеет таки вызывать external functions с колбэками в качестве аргументов :) Но она к сожалению платная. ЗЫ. RPCFUNC - это вообще не в ту степь. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2009, 11:15 |
|
Как правильно написать определение внешней ф-ии
|
|||
---|---|---|---|
#18+
roleksа они и не связаны просто из второй вызывается первая а TMathFunc -этостандартный тип в делфи Если из второй вызывается первая, то зачем нужно ее каким-то образом запихивать в параметры второй? Это какая-то бесконечная рекурсия у Вас получается. Вы уж разберитесь кто на ком стоял. При этом совершенно не ясно что нужно передать в качестве параметра и где там фигурирует тип TMathFunc. Второй параметр наверное нужно описывать как ulong - это указатель. При том, если почитать интернет, то вроде утверждается что там долен быть указатель на callback функцию, что только средствами PB не реализуется (если в этой функции нужно хоть что-то делать). И вообще, что все должны наизусть знать описание TMathFunc, здесь же не форум по Delphi? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2009, 11:24 |
|
Как правильно написать определение внешней ф-ии
|
|||
---|---|---|---|
#18+
Anatoly MoskovskyPB не поддерживает указатели на ф-и (колбэки) в качестве аргументов external functions. Тут есть 3 варианта развития событий: 1) Если вдруг повезло и OpenFiscalReceipt умеет принимать NULL вместо колбэка и игнорировать его, тогда этот аргумент можно описать как long и передавать туда 0. Естественно если колбэк используется для возврата результата ф-и, а не только для уведомлений, то этот вариант не пройдет. 2) Написать на C/C++ обертку в которой поместить этот колбэк и потом отдельным вызовом как-то передать в PB полученные через него данные. 3) Специально для подобных случаев я написал библиотеку , которая помимо прочего умеет таки вызывать external functions с колбэками в качестве аргументов :) Но она к сожалению платная. ЗЫ. RPCFUNC - это вообще не в ту степь. Скорее всего буду 2 вариант оиспользовать спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2009, 15:59 |
|
Как правильно написать определение внешней ф-ии
|
|||
---|---|---|---|
#18+
to Anatoly Moskovsky Это про это имелось ввиду, когда говорилось о теплом пляже ----------------------------------------------------------------------------- Главная деталь любой машины - голова ее владельца ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2009, 18:10 |
|
Как правильно написать определение внешней ф-ии
|
|||
---|---|---|---|
#18+
spas2001to Anatoly Moskovsky Это про это имелось ввиду, когда говорилось о теплом пляже Ну так я ж осуществил свое обещание :) Я даже весь июнь каждый день ходил на пляж (чего не бывало за все 15 лет сколько я живу в Одессе). А потом как-то расхотелось :) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2009, 20:35 |
|
Как правильно написать определение внешней ф-ии
|
|||
---|---|---|---|
#18+
я-бы попробовал объявить так: 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: не уверен что будет работать ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2009, 20:37 |
|
Как правильно написать определение внешней ф-ии
|
|||
---|---|---|---|
#18+
To Dmitry.. +1 ----------------------------------------------------------------------------- Главная деталь любой машины - голова ее владельца ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2009, 00:05 |
|
Как правильно написать определение внешней ф-ии
|
|||
---|---|---|---|
#18+
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: не уверен что будет работать ;) что то я не понял немного ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2009, 09:55 |
|
Как правильно написать определение внешней ф-ии
|
|||
---|---|---|---|
#18+
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 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2009, 11:01 |
|
|
start [/forum/topic.php?fid=15&fpage=30&tid=1336138]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
41ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
2ms |
others: | 297ms |
total: | 429ms |
0 / 0 |