UDF для Firebird
Модератор: Модераторы
-
don
- Иван Шихалев
- энтузиаст
- Сообщения: 1138
- Зарегистрирован: 15.05.2006 11:26:13
- Откуда: Екатеринбург
- Контактная информация:
-
Guest
<span style='font-family:courier'>//Исходный код
library udflib;
{$ALIGN OFF}
{$mode objfpc}
{$smartlink off}
{$PACKRECORDS C}
uses
SysUtils,
Classes;
{DECLARE EXTERNAL FUNCTION IOR
longint,
longint
RETURNS longint BY VALUE
ENTRY_POINT 'fn_or' MODULE_NAME 'udflib.so'}
function fn_or(var I1,I2: longint) : longint; cdecl; export;
begin
Result := I1 or I2;
end;
exports
fn_or name 'fn_or';
end.</span>
library udflib;
{$ALIGN OFF}
{$mode objfpc}
{$smartlink off}
{$PACKRECORDS C}
uses
SysUtils,
Classes;
{DECLARE EXTERNAL FUNCTION IOR
longint,
longint
RETURNS longint BY VALUE
ENTRY_POINT 'fn_or' MODULE_NAME 'udflib.so'}
function fn_or(var I1,I2: longint) : longint; cdecl; export;
begin
Result := I1 or I2;
end;
exports
fn_or name 'fn_or';
end.</span>
-
don(Дмитрий Филиппов)
Уважаемые форумчане! Первый опыт написания UDF на FPC в Lazarus. Поэтому очень надеюсь на ответ и не судите строго, ежели обнаружите явные ошибки в моей ДНК
Имеется проект библиотеки:
и
В Lasarus (v 0.9.14) компилируется, в InterBase выдает
<span style='color:red'>
Invalid token.
invalid request BLR at offset 448.
function FP_SERVERDATE is not defined.
module name or entrypoint could not be found.
</span>
После компиляции в Delphi работает замечательно.
Читал эту ветку форума, вроде бы поправил все, что было раньше, в соответствии с тутошними рекомендациями - ничего не помогает
Укажите, плизь, где моя криворукость?
Заранее признателен.
Имеется проект библиотеки:
Код: Выделить всё
library StageUDF;
{$ALIGN OFF}
{$mode objfpc}
{$smartlink off}
{$PACKRECORDS C}
uses
StageLibrary in 'StageLibrary.pas'
{ add your units here };
exports
ServerDate name 'ServerDate';
begin
end.
и
Код: Выделить всё
unit StageLibrary;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils;
type
PIBDateTime = ^TIBDateTime;
TIBDateTime = record
Days, // Date: Days since 17 November 1858
MSec10 : Integer; // Time: Millisecond * 10 since midnigth
end;
function ToDelphiDate(const aIBDateTime: TIBDateTime): TDateTime;
function ServerDate(var ServerIBDateTime: TIBDateTime): PIBDateTime; cdecl; export;
implementation
const // Date translation constants
MSecsPerDay10 = MSecsPerDay * 10; // Milliseconds per day * 10
IBDateDelta = 15018; // Days between Delphi and InterBase dates
function ToDelphiDate(const aIBDateTime: TIBDateTime): TDateTime;
begin
with aIBDateTime do
Result := Days - IBDateDelta + MSec10 / MSecsPerDay10;
end;
function ServerDate(var ServerIBDateTime: TIBDateTime): PIBDateTime; cdecl; export;
var
DelphyDays : Integer;
begin
DelphyDays := Trunc(Now);
with ServerIBDateTime do begin
Days := DelphyDays + IBDateDelta;
MSec10 := Trunc((Now - DelphyDays) * MSecsPerDay10);
end;
Result := @ServerIBDateTime;
end;
end.
В Lasarus (v 0.9.14) компилируется, в InterBase выдает
<span style='color:red'>
Invalid token.
invalid request BLR at offset 448.
function FP_SERVERDATE is not defined.
module name or entrypoint could not be found.
</span>
После компиляции в Delphi работает замечательно.
Читал эту ветку форума, вроде бы поправил все, что было раньше, в соответствии с тутошними рекомендациями - ничего не помогает
Укажите, плизь, где моя криворукость?
Заранее признателен.
Прошу прощения, не указал, как регистрировал на IB-сервере. Вот так:
StageUDF.dll куда надо не забыл положить
Код: Выделить всё
declare external function fp_serverdate
date
returns
date
entry_point "ServerDate"
module_name "StageUDF";
StageUDF.dll куда надо не забыл положить
-
Константин
А вы попробуйте выполнить какую-либо функцию из вашей библиотеке,
в тестовой программке м вы всё поймете.
Я задавал уже подобный вопрос.
При подкрузке библиотеке RTLD пытается найти main, а он "undefined".
Вот тред: <a href='http://www.dore.ru/perl/nntp.pl?f=1&gid=22&mid=22672' target='_blank'>http://www.dore.ru/perl/nntp.pl?f=1&gid=22&mid=22672</a>
в тестовой программке м вы всё поймете.
Я задавал уже подобный вопрос.
При подкрузке библиотеке RTLD пытается найти main, а он "undefined".
Вот тред: <a href='http://www.dore.ru/perl/nntp.pl?f=1&gid=22&mid=22672' target='_blank'>http://www.dore.ru/perl/nntp.pl?f=1&gid=22&mid=22672</a>
