Firebird 2.5 を使用しています。
いくつかの入力パラメータから文字列を返すために、Delphi XE2 UDF を作成しようとしています。
Delphi の関数は次のとおりです。
function FormatRasaSingle(var formatRasa : PChar; var aDenumire : PChar; var aCod : PChar; var aSimbol : PChar; var aTulpina : PChar) : PChar;
var tmpString : String;
tmpInteger : Integer;
begin
tmpString := formatRasa;
tmpString := StringReplace(tmpString, '#DENUMIRE', aDenumire, [rfReplaceAll, rfIgnoreCase]);
tmpString := StringReplace(tmpString, '#COD', aCod, [rfReplaceAll, rfIgnoreCase]);
tmpString := StringReplace(tmpString, '#SIMBOL', aSimbol, [rfReplaceAll, rfIgnoreCase]);
tmpString := StringReplace(tmpString, '#TULPINA', aTulpina, [rfReplaceAll, rfIgnoreCase]);
tmpString := 'MAMA';
tmpInteger := Length(tmpString) + 1;
Result := ib_util_malloc(tmpInteger);
StrPCopy(Result, tmpString);
end;
udf 宣言は次のとおりです。
DECLARE EXTERNAL FUNCTION FORMATRASASINGLE
CSTRING(255),
CSTRING(255),
CSTRING(255),
CSTRING(255),
CSTRING(255)
RETURNS CSTRING(255) FREE_IT
ENTRY_POINT 'FormatRasaSingle' MODULE_NAME 'eliteSoftFirebird';
関数をテストしようとすると、最初の文字「M」のみが返されます。
台詞
tmpString := 'MAMA';
テスト専用です。実際のコードはこの行の前にあります。
しかし、動作していません。
誰かが私にアドバイスできますか?
間違いはどこですか?
また、1つのパラメーターを入力しようとすると、「接続からのデータの読み取りエラー」のような大きなエラーが発生します。
Tks
ラズヴァン
double パラメーターが数値 (5, 2) であると仮定すると、この関数はどのようにする必要がありますか?
function FormatRasaMultiple(const formatRasa, aDenumire, aCod, aSimbol, aTulpina : PAnsiChar; aProcent : Double) : PAnsiChar; cdecl; export;
関数は前のものとまったく同じですが、もう1つの数値パラメーターがあります。
これまで(私の古いUDF Firebird 1.5)宣言を「var aProcent : Double」として使用していましたが、返すと値がありません。
UDF は次のように宣言されます。
DECLARE EXTERNAL FUNCTION FORMATRASAMULTIPLE
CSTRING(255),
CSTRING(255),
CSTRING(255),
CSTRING(255),
CSTRING(255),
NUMERIC(5, 2)
RETURNS CSTRING(255) FREE_IT
ENTRY_POINT 'FormatRasaMultiple' MODULE_NAME 'eliteSoftFirebird';