![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не работает UDF [D6, IB6.x]
i © (2002-09-19 10:15:00)Создал DLL:
library MyUDF;
uses
SysUtils,
Classes;
{$R *.res}
function DelSubStr(Str, SubStr: PChar): PChar; cdecl; export;
var
S : string;
begin
Result := nil;
StrCopy(Result, Str);
if StrPos(Result, SubStr) <> nil then begin
S := string(Result);
Delete(S, Pos(string(SubStr), S), StrLen(SubStr));
Result := PChar(S);
end;
end;
exports
DelSubStr;
begin
end.
Положил DLL в ..\InterBase\bin\
Объявил ее в IB:
DECLARE EXTERNAL FUNCTION DELSUBSTR
VARCHAR(100),
VARCHAR(100)
RETURNS CSTRING(100) FREE_IT
ENTRY_POINT "DelSubStr" MODULE_NAME "MyUDF";
Деляю запрос:
update operation set ind_priv = delsubstr(ind_priv, user)
Выдается сообщение: Unsuccessful execution caused by system error that does not preclude successful execution of subsequent statements. connection lost to database.
В ЧЕМ ТУТ ОШИБКА?????????????
Помогите пожалуйста, уважаемые мастера.
Desdechado (2002-09-19 19:24:00) [1]ошибка в том, что при работе со строками используется борландовский менеджер памяти. А ИБ скомпилирован на MS C++. Отсюда конфликт и завал сервера. Используй malloc из msvcrt.dll для выделения памяти под новую строку.
и не VARCHAR(100) а CSTRING(100)
i (2002-09-19 11:39:00) [2]Пробовал и туда
Johnmen (2002-09-19 11:05:00) [3]Для начала - DLL должна лежать в ..\InterBase\Udf