Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Calling external libraries from procedures Sybase Delphi / 11 сообщений из 11, страница 1 из 1
21.12.2006, 18:28
    #34217046
dka
dka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Calling external libraries from procedures Sybase Delphi
есть 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, то работает.
Вопрос: что Я тут неправильно написал?
...
Рейтинг: 0 / 0
21.12.2006, 18:51
    #34217101
Александр Гoлдун
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Calling external libraries from procedures Sybase Delphi
dka
function Delete_File(filename:ShortString):ShortString; cdecl; export;
begin
result:=filename;
end;
exports Delete_File name 'Delete_File';
.....
Сервак виснет. Если входные или выходные параметры внешней функции Integer, то работает.
Вопрос: что Я тут неправильно написал?
Все неправильно (включая название сервера :). Читай доки внимательнее и смотри примеры из папки %ASANY9%\Samples\Asa\ExternalProcedures. Там не все так просто.
...
Рейтинг: 0 / 0
21.12.2006, 19:04
    #34217129
Dim2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Calling external libraries from procedures Sybase Delphi
dka wrote:

> function Delete_File(filename:ShortString):ShortString; cdecl; export;

Оставь в покое животное ! По крайней мере, до тех пор, пока не
поймёшь, почему здесь не место ShortString и cdecl.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
21.12.2006, 19:17
    #34217149
dka
dka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Calling external libraries from procedures Sybase Delphi
поменял
function Delete_File(filename:ShortString):ShortString; cdecl; export;
на
function Delete_File(filename:String):PChar; stdcall; export;
всё равно не работает
...
Рейтинг: 0 / 0
21.12.2006, 20:36
    #34217253
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Calling external libraries from procedures Sybase Delphi
Ну а параметр функции то почему String?

---
http://www.rusug.ru] Портал русскоязычной группы пользователей Sybase
...
Рейтинг: 0 / 0
21.12.2006, 21:13
    #34217282
Dmitry.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Calling external libraries from procedures Sybase Delphi
вот такая ф-я работает:
Код: plaintext
1.
create function DBA.exf_deletefile(in @filename char( 256 ))
returns integer external name 'DeleteFileA@kernel32.dll'
...
Рейтинг: 0 / 0
22.12.2006, 10:32
    #34217959
dka
dka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Calling external libraries from procedures Sybase Delphi
White OwlНу а параметр функции то почему String?

---
http://www.rusug.ru] Портал русскоязычной группы пользователей Sybase

Заменил String на PChar- всё равно сервак падает.
...
Рейтинг: 0 / 0
22.12.2006, 10:44
    #34218000
dka
dka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Calling external libraries from procedures Sybase Delphi
Dmitry.вот такая ф-я работает:
Код: plaintext
1.
create function DBA.exf_deletefile(in @filename char( 256 ))
returns integer external name 'DeleteFileA@kernel32.dll'


Заменил PChar на Integer - работает.
Но дело в том, что мне нужно уничтожать файл в функции, в DLL передаётся имя файла.
Файл не удаляется, тогда Я решил проверить а корректно ли передаётся имя файла?
Поэтому решил просто обратно возвратить имя файла из DLL, на возвращаемый PChar параметр Sybase падает.
Как тут быть не знаю.
Пробовал входной и возвращаемый параметр делать char, работает, но возвращает совсем не тот символ, что передавал.
Какая то проблема с кодировкой.
Может нужно как то по особенному писать DLL на Delphi?
...
Рейтинг: 0 / 0
22.12.2006, 11:05
    #34218091
ASCRUS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Calling external libraries from procedures Sybase Delphi
dkaНо дело в том, что мне нужно уничтожать файл в функции, в DLL передаётся имя файла.
Нужно через старндартную функцию вызвать командный процессор и передать ему команду DEL <FileName>, а не городить огород из своих функций, давая повод серваку упасть и грохнуть базу. За мои 10 лет работы с различными РСУБД ни разу не потребовалось писать внешнюю процедуру, все решалось штатными средствами сервера. Советую Вам забыть про такие вещи, особенно это пригодится, когда вдруг одну из Ваших БД нужно будет запустить на другой операционной системе, к примеру Linux.
...
Рейтинг: 0 / 0
22.12.2006, 13:11
    #34218674
Dmitry.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Calling external libraries from procedures Sybase Delphi
ASCRUS +1

но в продолжении темы

лучше не делать из ф-ции "return CHAR*"
Кто будет освобождать эту память??? (тут придется читать доку.)

можно сделать OUT параметр вместо этого.
НО надо его инициализировать перед передачей в функцию.

по поводу типов и ф-ции:

паскаля не знаю но в С это выглядит так:
extern "C" int __stdcall Delete_File(CHAR*file);

CHAR* это указатель на строку заканьчивающуюся нулевым символом.
--
а вообще прислушайтесь к совету ASCRUS
...
Рейтинг: 0 / 0
22.12.2006, 13:46
    #34218807
dka
dka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Calling external libraries from procedures Sybase Delphi
Всем спасибо за советы. Для меня всё стало гораздо яснее. :)
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Calling external libraries from procedures Sybase Delphi / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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