AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Firebird UDF unter Lazarus

Ein Thema von Saschko · begonnen am 11. Nov 2009 · letzter Beitrag vom 11. Nov 2009
Antwort Antwort
Saschko

Registriert seit: 4. Feb 2007
6 Beiträge
 
#1

Firebird UDF unter Lazarus

  Alt 11. Nov 2009, 10:14
Datenbank: Firebird • Version: 1.5 und 2.1 • Zugriff über: verschieden
Hallo,

ich versuche gerade einige Funktionen als UDF für Firebird2.1 64Bit in Lazarud umzusetzen.
Klappt soweit ganz gut. Nur mit den Strings habe ich so meine Probleme.
Benutzt man nun grundsätzlich PChar, muss mann Speicher alloziieren und mit
FREE_IT freigeben, und so weiter.

Alle Tutorials die ich zu dem Thema gefunden habe, sind steinalt.

Kann mir jemand von euch vielleicht weiterhelfen?

Danke im Voraus

Sascha
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Firebird UDF unter Lazarus

  Alt 11. Nov 2009, 10:18
Da hat sich nichts geändert. Die "steinalten" Tuts sollten eigentlich immer noch gültig sein.
Markus Kinzler
  Mit Zitat antworten Zitat
Saschko

Registriert seit: 4. Feb 2007
6 Beiträge
 
#3

Re: Firebird UDF unter Lazarus

  Alt 11. Nov 2009, 12:32
Das bedeutet das hier

Delphi-Quellcode:
function UpperChar(const p:PChar):PChar; cdecl;
{
DECLARE EXTERNAL FUNCTION UpperChar
CString(255)
RETURNS CString(255) FREE_IT
ENTRY_POINT 'UpperChar' MODULE_NAME 'MyUDF'
}

var s:string;
begin
  s:=STRING(p);
  s:=AnsiUpperCase(s);
  Result := ib_util_malloc(Length(s)+1);
  StrPCopy(Result, s);
end;
und das hier

Delphi-Quellcode:
function AddStr(const aChar1, aChar2, aChar3:PChar):Pchar;
cdecl;
{
DECLARE EXTERNAL FUNCTION AddStr
CString(50), CString(50), CString(1)
RETURNS CString(101) FREE_IT
ENTRY_POINT 'AddStr' MODULE_NAME 'MyUDF'
}

var s1, s2, s3,s4:String;
begin
  s1:=STRING(aChar1);
  s2:=STRING(aChar2);
  s3:=STRING(aChar3);
  s4:=s1+s3+s2;
  Result := ib_util_malloc(Length(s4)+1);
  StrPCopy(Result, s4);
end;
wäre eine gute Vorlage?

Geht das nicht auch anders, als mit ib_util_malloc ?

[edit=mkinzler]Code-Tags durch Delphi-Tags ersetzt Mfg, mkinzler[/edit]
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz