
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
16.06.2003, 13:56
|
|||
|---|---|---|---|
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, 14:18
|
|||
|---|---|---|---|
UDF под win работает, под Linux нет. Ну почему ??? |
|||
|
#18+
Может все же надо написать Result := PChar(TrimRight(CString1)); Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.06.2003, 14:24
|
|||
|---|---|---|---|
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:37
|
|||
|---|---|---|---|
UDF под win работает, под Linux нет. Ну почему ??? |
|||
|
#18+
Неправильно использовать функцию StdCall. Нужно cdecl. В Борландовской доке ошибка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.06.2003, 18:13
|
|||
|---|---|---|---|
UDF под win работает, под Linux нет. Ну почему ??? |
|||
|
#18+
Не помогло. :-(( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.06.2003, 18:49
|
|||
|---|---|---|---|
UDF под win работает, под Linux нет. Ну почему ??? |
|||
|
#18+
Может чё-то с правами на файл не то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.06.2003, 18:53
|
|||
|---|---|---|---|
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:57
|
|||
|---|---|---|---|
UDF под win работает, под Linux нет. Ну почему ??? |
|||
|
#18+
Ты обязательно исправь stdcall на cdecl. Могут быть проблемы. У меня уже было. Функция работала, работала, а в одном месте выдавала левые результаты. Я задолбался потом выяснять, что не так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.06.2003, 18:59
|
|||
|---|---|---|---|
UDF под win работает, под Linux нет. Ну почему ??? |
|||
|
#18+
Это я исправил, просто скопировал с верхнего поста. Но все таки странно, это я насчет Free_IT не Free_IT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.06.2003, 19:04
|
|||
|---|---|---|---|
UDF под win работает, под Linux нет. Ну почему ??? |
|||
|
#18+
Попробуй StrPCopy(Result,TrimRight(CString1)) Вобще-то это чё-то с менеджером памяти. Можешь вверху попробовать прописать первым модулем ShareMem uses ShareMem, ... остальные модули ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
17.06.2003, 10:14
|
|||
|---|---|---|---|
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, 17:58
|
|||
|---|---|---|---|
UDF под win работает, под Linux нет. Ну почему ??? |
|||
|
#18+
Спасибо, за то что успокоили. malloc действительно не используем, но я вообще-то думал, что Delphi все же выделяет какую-то память на помещение результата функции и ее надо бы почистить. Теперь объявляем без FREE_IT. А для надежности функцию переписали: Код: plaintext 1. 2. 3. 4. 5. Все работает, уф. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/search_topic.php?author=Pasha777&author_mode=last_topics&do_search=1]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
get settings: |
8ms |
get forum list: |
15ms |
get settings: |
8ms |
get forum list: |
9ms |
get settings: |
5ms |
get forum list: |
9ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
150ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 2889ms |
| total: | 3210ms |

| 0 / 0 |
