Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Calling external libraries from procedures Sybase Delphi
|
|||
|---|---|---|---|
|
#18+
есть DLL на Delphi: library Project1; {$R *.res} function Delete_File(filename:ShortString):ShortString; cdecl; export; begin result:=filename; end; exports Delete_File name 'Delete_File'; begin end. Функция на Sybase 9: create function DBA.dll_func(in @filename char(256)) returns char(256) external name 'Delete_File@D:\\Work\\DLL_Project\\Project1.dll' Вызываю из InterActive: CREATE PROCEDURE "DBA"."ttt"() BEGIN declare @res char(255); @res=call dll_func( 'C:\1.txt' ); select @res END Сервак виснет. Если входные или выходные параметры внешней функции Integer, то работает. Вопрос: что Я тут неправильно написал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2006, 18:28 |
|
||
|
Calling external libraries from procedures Sybase Delphi
|
|||
|---|---|---|---|
|
#18+
dka function Delete_File(filename:ShortString):ShortString; cdecl; export; begin result:=filename; end; exports Delete_File name 'Delete_File'; ..... Сервак виснет. Если входные или выходные параметры внешней функции Integer, то работает. Вопрос: что Я тут неправильно написал? Все неправильно (включая название сервера :). Читай доки внимательнее и смотри примеры из папки %ASANY9%\Samples\Asa\ExternalProcedures. Там не все так просто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2006, 18:51 |
|
||
|
Calling external libraries from procedures Sybase Delphi
|
|||
|---|---|---|---|
|
#18+
dka wrote: > function Delete_File(filename:ShortString):ShortString; cdecl; export; Оставь в покое животное ! По крайней мере, до тех пор, пока не поймёшь, почему здесь не место ShortString и cdecl. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2006, 19:04 |
|
||
|
Calling external libraries from procedures Sybase Delphi
|
|||
|---|---|---|---|
|
#18+
поменял function Delete_File(filename:ShortString):ShortString; cdecl; export; на function Delete_File(filename:String):PChar; stdcall; export; всё равно не работает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2006, 19:17 |
|
||
|
Calling external libraries from procedures Sybase Delphi
|
|||
|---|---|---|---|
|
#18+
Ну а параметр функции то почему String? --- http://www.rusug.ru] Портал русскоязычной группы пользователей Sybase ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2006, 20:36 |
|
||
|
Calling external libraries from procedures Sybase Delphi
|
|||
|---|---|---|---|
|
#18+
вот такая ф-я работает: Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2006, 21:13 |
|
||
|
Calling external libraries from procedures Sybase Delphi
|
|||
|---|---|---|---|
|
#18+
White OwlНу а параметр функции то почему String? --- http://www.rusug.ru] Портал русскоязычной группы пользователей Sybase Заменил String на PChar- всё равно сервак падает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2006, 10:32 |
|
||
|
Calling external libraries from procedures Sybase Delphi
|
|||
|---|---|---|---|
|
#18+
Dmitry.вот такая ф-я работает: Код: plaintext 1. Заменил PChar на Integer - работает. Но дело в том, что мне нужно уничтожать файл в функции, в DLL передаётся имя файла. Файл не удаляется, тогда Я решил проверить а корректно ли передаётся имя файла? Поэтому решил просто обратно возвратить имя файла из DLL, на возвращаемый PChar параметр Sybase падает. Как тут быть не знаю. Пробовал входной и возвращаемый параметр делать char, работает, но возвращает совсем не тот символ, что передавал. Какая то проблема с кодировкой. Может нужно как то по особенному писать DLL на Delphi? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2006, 10:44 |
|
||
|
Calling external libraries from procedures Sybase Delphi
|
|||
|---|---|---|---|
|
#18+
dkaНо дело в том, что мне нужно уничтожать файл в функции, в DLL передаётся имя файла. Нужно через старндартную функцию вызвать командный процессор и передать ему команду DEL <FileName>, а не городить огород из своих функций, давая повод серваку упасть и грохнуть базу. За мои 10 лет работы с различными РСУБД ни разу не потребовалось писать внешнюю процедуру, все решалось штатными средствами сервера. Советую Вам забыть про такие вещи, особенно это пригодится, когда вдруг одну из Ваших БД нужно будет запустить на другой операционной системе, к примеру Linux. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2006, 11:05 |
|
||
|
Calling external libraries from procedures Sybase Delphi
|
|||
|---|---|---|---|
|
#18+
ASCRUS +1 но в продолжении темы лучше не делать из ф-ции "return CHAR*" Кто будет освобождать эту память??? (тут придется читать доку.) можно сделать OUT параметр вместо этого. НО надо его инициализировать перед передачей в функцию. по поводу типов и ф-ции: паскаля не знаю но в С это выглядит так: extern "C" int __stdcall Delete_File(CHAR*file); CHAR* это указатель на строку заканьчивающуюся нулевым символом. -- а вообще прислушайтесь к совету ASCRUS ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2006, 13:11 |
|
||
|
|

start [/forum/topic.php?fid=55&msg=34217149&tid=2012338]: |
0ms |
get settings: |
5ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
38ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 213ms |
| total: | 335ms |

| 0 / 0 |
