Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

UDF для Firebird со строчными параметрами [D6, Firebird]


DSKalugin ©   (2004-12-17 19:49:00) 


library my_udf;

uses StrUtils,SysUtils;

function ClearSkladCod(var vsCod: PChar):PChar; stdcall; export;
const ClearChars=['0'..'9','A'..'Z'];
var ns:pchar;
   t:ShortString;
   i,j:Byte;
begin
 t:='';
 getmem(ns,30);
 StrCopy(ns,AnsiStrUpper(vsCod));
 j:=Length(ns);
 for i:=0 to j-1 do
   if (ns[i] in ClearChars)
     then t:=t+ns[i];
 freemem(ns);
 StrPCopy(Result,t);
end;

exports
 ClearSkladCod;

begin
 IsMultiThread:=True;
end.
-----------------------------------
DECLARE EXTERNAL FUNCTION ClearSkladCod
   CSTRING(30)
   RETURNS CSTRING(30) FREE_IT
   ENTRY_POINT 'ClearSkladCod'  MODULE_NAME 'my_udf';

при вызове в IBExpert выдает ошибку AV и разрывает соединение
В чем ошибка?


DrPass   (2004-12-18 20:44:00) [1]

А почему stdcall? IB вроде как использует соглашение cdecl


DSKalugin   (2004-12-18 16:58:00) [2]

2 Johnmen
Спасибо за линк, я интуитивно сам понимал, что надо как-то выделять память под результат. Но не знал как. На "ибасе" все перерыл перед тем как сюда написать

2 jack128
ок буду пробовать ib_util_malloc
а синтаксис какой ?


jack128   (2004-12-18 00:21:00) [3]

предирка к статье. Вообще говоря malloc нужно импортировать из ib_util.dll/функция ib_util_malloc


Johnmen   (2004-12-17 23:08:00) [4]

Глянь здесь
http://www.realcoding.net/part.php?id=1579
и см. на ibase.ru, там много материала...


Наверх

Титульная страница Поиск, карта сайта Написать письмо