powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / UDF DLL 64 бит Delphi
25 сообщений из 36, страница 1 из 2
UDF DLL 64 бит Delphi
    #38733581
verve
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Была DLL UDF под 32 бита, а тут перебросил на 64 бит и все, что связано со строками работает как-то неадекватно. Обычный sybstr (собственный) и тот работает не так... Что там изменилоось?
...
Рейтинг: 0 / 0
UDF DLL 64 бит Delphi
    #38733592
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
UDF DLL 64 бит Delphi
    #38733613
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
verveБыла DLL UDF под 32 бита, а тут перебросил на 64 бит и все, что связано со
строками работает как-то неадекватно
Программы всегда работают точно так , как написаны.

Ты в курсе, что 64 бит Дельфи - исключительно юникодные?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
UDF DLL 64 бит Delphi
    #38733633
verve
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov, да...
Только 32 бита отрабатывает корректно
...
Рейтинг: 0 / 0
UDF DLL 64 бит Delphi
    #38733634
verve
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Более того, если функция в Delphi программе, то работает и под 64 битной ОС отлично
...
Рейтинг: 0 / 0
UDF DLL 64 бит Delphi
    #38733647
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
verveфункция
Исходники показать постесняешься?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
UDF DLL 64 бит Delphi
    #38733650
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
verve,

ты пример давай. Код UDF функции, DDL её объявления, ну и собственно запрос в котором она не так работает.

P.S. По возможности от UDF надо оказываться. Это до FB2.1 без них было туго. Сейчас большинство из них можно встроенными заменить.
...
Рейтинг: 0 / 0
UDF DLL 64 бит Delphi
    #38733670
verve
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
function SubStr(CString: PWideChar; var FromPos, ToPos: Int64): PWideChar; cdecl; export;
begin
  result:=pchar(copy(cstring, frompos, topos));
end;



Даже если так, то срабатывает так: с нужной позиции берет в 2 раза больше символов
...
Рейтинг: 0 / 0
UDF DLL 64 бит Delphi
    #38733672
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
verve,

у тебя БД в какой кодировке?

PWideChar - 2 байта на символ PAnsiChar - 1 байт

SubStr - можно заменить на стандартный SUBSTRING
...
Рейтинг: 0 / 0
UDF DLL 64 бит Delphi
    #38733673
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только мне кажется странным преобразовывать widechar в char путём приведения типов???
...
Рейтинг: 0 / 0
UDF DLL 64 бит Delphi
    #38733676
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
verveДаже если так
И после этого ты утверждаешь, что знаешь об юникодности...

То, что эта функция вообще не валит сервер - уже чудо. Несоответствие параметров
передаваемым типам просто меркнет на фоне возврата указателя на уже освобождённую память.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
UDF DLL 64 бит Delphi
    #38733694
verve
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код работает под 32 бита)))
...
Рейтинг: 0 / 0
UDF DLL 64 бит Delphi
    #38733702
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
verveКод работает под 32 бита)))
Во-первых, потому что он скомпилирован какой-нибудь рухлядью типа Delphi 7.
Во-вторых, дуракам везёт.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
UDF DLL 64 бит Delphi
    #38733703
verve
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему?
...
Рейтинг: 0 / 0
UDF DLL 64 бит Delphi
    #38733747
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

В дельфях с поддеркой Unicode - PWideChar=PChar...
...
Рейтинг: 0 / 0
UDF DLL 64 бит Delphi
    #38733748
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
verve,

При такой реализации есть неплохой шанс вернуть мусор. Почитай блог GunSmoker`a - он много писал об этом.
...
Рейтинг: 0 / 0
UDF DLL 64 бит Delphi
    #38733792
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMaster,

я бы сказал, что наоборот

PChar=PWideChar ибо PWideChar везде одинаков
...
Рейтинг: 0 / 0
UDF DLL 64 бит Delphi
    #38733825
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
verveПочему?
Лови рабочий пример. На 64 битном, на юникодной базе работает.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
// JCL_DEBUG_EXPERT_GENERATEJDBG OFF
// JCL_DEBUG_EXPERT_INSERTJDBG OFF
{$DEFINE FREE_IT}
library wad_udf;

uses
  System.SysUtils,
  ib_util;

type
    PIBDateTime = ^TIBDateTime;
    TIBDateTime = record
        Days, // Date: Days since 17 November 1858
        MSec10: Integer; // Time: Millisecond * 10 since midnigth
    end;

const // константы трансляции даты:
    MSecsPerDay10 = MSecsPerDay * 10; // миллисекунд в сутках * 10
    IBDateDelta = 15018; // разница в днях между датами Delphi 2.0 и InterBase

function DateTimeToChar(var IBDateTime: TIBDateTime; sz: PAnsiChar): PAnsiChar; cdecl; export;
var d: TDateTime;
    u: UTF8String;
    fs: TFormatSettings;
begin
    fs := TFormatSettings.Create;
    with IBDateTime do
        d := Days - IBDateDelta + MSec10 / MSecsPerDay10;
    u := FormatDateTime(UTF8String(sz), d, fs);
    Result := ib_util_malloc(Length(u)+1);
    StrCopy(Result, PAnsiChar(u));
end;

function IntegerToChar(var iLong: integer; sz: PAnsiChar): PAnsiChar; cdecl; export;
var u: UTF8String;
    fs: TFormatSettings;
begin
    fs := TFormatSettings.Create;
    u := Format(UTF8String(sz), [iLong], fs);
    Result := ib_util_malloc(Length(u)+1);
    StrCopy(Result, PAnsiChar(u));
end;

function FloatToChar(var F: Double; sz: PAnsiChar): PAnsiChar; cdecl; export;
var u: UTF8String;
    fs: TFormatSettings;
begin
    fs := TFormatSettings.Create;
    u := Format(UTF8String(sz), [F], fs);
    Result := ib_util_malloc(Length(u)+1);
    StrCopy(Result, PAnsiChar(u));
end;

function FloatToChar2(var F: Double; sz: PAnsiChar): PAnsiChar; cdecl; export;
var u: UTF8String;
    fs: TFormatSettings;
begin
    fs := TFormatSettings.Create;
    u := FormatFloat(UTF8String(sz), F, fs);
    Result := ib_util_malloc(Length(u)+1);
    StrCopy(Result, PAnsiChar(u));
end;

{$R *.res}

exports
    IntegerToChar,
    FloatToChar,
    FloatToChar2,
    DateTimeToChar;

begin
    IsMultiThread := True;
end.

...
Рейтинг: 0 / 0
UDF DLL 64 бит Delphi
    #38733883
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
verve,

в конце есть пример юникодной udf, с пояснениями.
http://www.ibase.ru/unicode_faq.html
...
Рейтинг: 0 / 0
UDF DLL 64 бит Delphi
    #38738788
verve
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо! Проблема была в определении длины строки)))
...
Рейтинг: 0 / 0
UDF DLL 64 бит Delphi
    #38738816
Фотография zirra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
verve> Спасибо! Проблема была в определении длины строки)))
А по-моему проблема в том, что ты не желаешь воспользоваться советом от Симонов Денис ...

--
Vladimir A.Bakhvaloff
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
UDF DLL 64 бит Delphi
    #38741013
FedorinoFF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В прошлом годе озадачился переходом на x64 UDF. В голове родилось такое понимание работы с кодовыми страницами внутри Firebird.
Если в чем-то ошибаюсь, просьба поправить.


...
Рейтинг: 0 / 0
UDF DLL 64 бит Delphi
    #38741032
Поручик ·· Ржевский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FedorinoFFВ прошлом годе озадачился переходом на x64 UDF. В голове родилось такое понимание работы с кодовыми страницами внутри Firebird.
Если в чем-то ошибаюсь, просьба поправить.


...
Рейтинг: 0 / 0
UDF DLL 64 бит Delphi
    #38741115
FedorinoFF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поручик ·· Ржевский,

Да, виноват, неправильно вложил картинку. Правой кнопкой по значку картики под спойлером и открыть ссылку. Откроется страничка с картинкой на Яндекс.Диск
...
Рейтинг: 0 / 0
UDF DLL 64 бит Delphi
    #38741128
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FedorinoFF,

разуй глаза - нет никакой картинки "под спойлером".
...
Рейтинг: 0 / 0
25 сообщений из 36, страница 1 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / UDF DLL 64 бит Delphi
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]