|
|
|
UDF под win работает, под Linux нет. Ну почему ???
|
|||
|---|---|---|---|
|
#18+
/* script */ DECLARE EXTERNAL FUNCTION "TrimR" CSTRING(254) RETURNS CSTRING(254) FREE_IT ENTRY_POINT 'TrimR' MODULE_NAME 'udf'; /* delphi / kylix */ function TrimR(CString1: PChar): PChar; stdcall; export; Begin TrimR:=PChar(TrimRight(CString1)); End; /* results */ Под виндой все катит. Под Linux сервер на вызов фукнции падает, а в Interbase.Log имеем: Segmentation Fault. The code attempted to access memory without privilege to do so. IB 6.0.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2003, 13:56 |
|
||
|
UDF под win работает, под Linux нет. Ну почему ???
|
|||
|---|---|---|---|
|
#18+
Может все же надо написать Result := PChar(TrimRight(CString1)); Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2003, 14:18 |
|
||
|
UDF под win работает, под Linux нет. Ну почему ???
|
|||
|---|---|---|---|
|
#18+
Вот эта работает и там и там /* scrypt */ DECLARE EXTERNAL FUNCTION "DatRuStr" DATE RETURNS CString(10) FREE_IT ENTRY_POINT 'DatRuStr' MODULE_NAME 'udf' /* Delphi / Kylix */ function DatRuStr(var IBDate: TIBDate): PChar; stdcall; export; Begin DatRuStr:=PChar(DateToStr(IBDate-15018)); End; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2003, 14:24 |
|
||
|
UDF под win работает, под Linux нет. Ну почему ???
|
|||
|---|---|---|---|
|
#18+
Неправильно использовать функцию StdCall. Нужно cdecl. В Борландовской доке ошибка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2003, 14:37 |
|
||
|
UDF под win работает, под Linux нет. Ну почему ???
|
|||
|---|---|---|---|
|
#18+
Не помогло. :-(( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2003, 18:13 |
|
||
|
UDF под win работает, под Linux нет. Ну почему ???
|
|||
|---|---|---|---|
|
#18+
Может чё-то с правами на файл не то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2003, 18:49 |
|
||
|
UDF под win работает, под Linux нет. Ну почему ???
|
|||
|---|---|---|---|
|
#18+
Если в объявлении опустить Free_IT, а функцию подправить: /* script */ DECLARE EXTERNAL FUNCTION "TrimR" CSTRING(254) RETURNS CSTRING(254) ENTRY_POINT 'TrimR' MODULE_NAME 'udf'; /* delphi / kylix */ function TrimR(CString1: PChar): PChar; stdcall; export; Begin TrimR:=PChar(TrimRight(CString1)+ #0 ); End; то тогда работает, но вроде так не правильно, или я чего не догоняю. Опять же под Windows работает с Free_IT и без #0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2003, 18:53 |
|
||
|
UDF под win работает, под Linux нет. Ну почему ???
|
|||
|---|---|---|---|
|
#18+
Ты обязательно исправь stdcall на cdecl. Могут быть проблемы. У меня уже было. Функция работала, работала, а в одном месте выдавала левые результаты. Я задолбался потом выяснять, что не так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2003, 18:57 |
|
||
|
UDF под win работает, под Linux нет. Ну почему ???
|
|||
|---|---|---|---|
|
#18+
Это я исправил, просто скопировал с верхнего поста. Но все таки странно, это я насчет Free_IT не Free_IT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2003, 18:59 |
|
||
|
UDF под win работает, под Linux нет. Ну почему ???
|
|||
|---|---|---|---|
|
#18+
Попробуй StrPCopy(Result,TrimRight(CString1)) Вобще-то это чё-то с менеджером памяти. Можешь вверху попробовать прописать первым модулем ShareMem uses ShareMem, ... остальные модули ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2003, 19:04 |
|
||
|
UDF под win работает, под Linux нет. Ну почему ???
|
|||
|---|---|---|---|
|
#18+
А что за параметр FREE_IT ты знаешь? Так вот: Он должен использоваться в том случае, если ты в функции делаешь распределение памяти. И тут надо ее освободить после выполнения твоей функции. В твоем варианте - этот параметр не должен указываться. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Вот это 100% работает и на Linux и в Windows! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2003, 10:14 |
|
||
|
UDF под win работает, под Linux нет. Ну почему ???
|
|||
|---|---|---|---|
|
#18+
Спасибо, за то что успокоили. malloc действительно не используем, но я вообще-то думал, что Delphi все же выделяет какую-то память на помещение результата функции и ее надо бы почистить. Теперь объявляем без FREE_IT. А для надежности функцию переписали: Код: plaintext 1. 2. 3. 4. 5. Все работает, уф. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2003, 17:58 |
|
||
|
|

start [/forum/search_topic.php?author=%D0%B1%D1%83%D1%80%D0%B0%D1%82%D0%B8%D0%BD%D0%BE+%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D1%8F%D0%BD%D0%BA%D0%BE%D0%B2%D0%B8%D1%87&author_mode=last_topics&do_search=1]: |
0ms |
get settings: |
7ms |
get forum list: |
18ms |
get settings: |
8ms |
get forum list: |
17ms |
get settings: |
9ms |
get forum list: |
19ms |
get settings: |
8ms |
get forum list: |
15ms |
get settings: |
10ms |
get forum list: |
20ms |
get settings: |
11ms |
get forum list: |
16ms |
get settings: |
8ms |
get forum list: |
14ms |
get settings: |
11ms |
get forum list: |
15ms |
get settings: |
7ms |
get forum list: |
14ms |
get settings: |
8ms |
get forum list: |
19ms |
get settings: |
7ms |
get forum list: |
16ms |
get settings: |
5ms |
get forum list: |
11ms |
get settings: |
6ms |
get forum list: |
16ms |
get settings: |
5ms |
get forum list: |
11ms |
get settings: |
8ms |
get forum list: |
20ms |
get settings: |
6ms |
get forum list: |
9ms |
get settings: |
6ms |
get forum list: |
9ms |
get settings: |
6ms |
get forum list: |
9ms |
get settings: |
5ms |
get forum list: |
9ms |
get settings: |
5ms |
get forum list: |
9ms |
get settings: |
7ms |
get forum list: |
14ms |
get settings: |
5ms |
get forum list: |
10ms |
get settings: |
6ms |
get forum list: |
13ms |
get settings: |
10ms |
get forum list: |
19ms |
get settings: |
11ms |
get forum list: |
19ms |
get settings: |
9ms |
get forum list: |
14ms |
get settings: |
5ms |
get forum list: |
9ms |
get settings: |
5ms |
get forum list: |
15ms |
get settings: |
10ms |
get forum list: |
15ms |
get settings: |
6ms |
get forum list: |
15ms |
get settings: |
10ms |
get forum list: |
18ms |
get settings: |
5ms |
get forum list: |
12ms |
get settings: |
9ms |
get forum list: |
15ms |
get settings: |
7ms |
get forum list: |
19ms |
get settings: |
6ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
155ms |
get topic data: |
10ms |
get first new msg: |
20ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 32825ms |
| total: | 33829ms |

| 0 / 0 |
