powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / UDF DLL 64 бит Delphi
36 сообщений из 36, показаны все 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
UDF DLL 64 бит Delphi
    #38741129
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FedorinoFF,

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

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

блин, ну никак не понимаю как картинку вставлять. вроде файл выбрал.. может Opera, или руки... и сообщение редактировать нельзя....
...
Рейтинг: 0 / 0
UDF DLL 64 бит Delphi
    #38741142
FedorinoFF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вот же оно.
...
Рейтинг: 0 / 0
UDF DLL 64 бит Delphi
    #38741144
FedorinoFF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во, походу, если начать писать сообщение будучи не авторизованным, то форма редактирования сообщения выглядит иначе, нежели чем при написании после авторизации. Понаблюдаем...
...
Рейтинг: 0 / 0
UDF DLL 64 бит Delphi
    #38741145
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FedorinoFF,

я уже написал. "картинка с другого сайта" имеет и фон поста, и текст как у текстов поста. Не знаю, зачем это сделано. Сколько на sql.ru сижу, а вот эту фигню только обнаружил.

Насчет картинки "преобразования чарсетов" - udf не является чем-то особенным, здесь дело скорее в преобразовании одного чарсета в другой, например, когда значение одной строки передается в другую, а они имеют разные чарсеты.
И если чарсеты могут быть преобразованы - тогда все ок. Если нет - ошибка.
Поэтому, обычно никто чарсет у строковых параметров udf не указывает. Однако, когда появилась поддержка UTF8, оказалось, что народ писал udf, предполагая, что у них база в win1251 (или в none), и клал болт на то, что передается внутрь udf.

именно поэтому в своем unicode_faq я привел пример udf, обрабатывающей utf8, и дал комментарии, как это работает с базами или данными в Win1251.
...
Рейтинг: 0 / 0
UDF DLL 64 бит Delphi
    #38741146
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FedorinoFF,

у меня выглядит так. поди догадайся, что это картинка, а не текст.
...
Рейтинг: 0 / 0
UDF DLL 64 бит Delphi
    #38741154
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FedorinoFFну никак не понимаю как картинку вставлять.
Ну так не косплей блондинку, вставляй текст.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
UDF DLL 64 бит Delphi
    #38741155
FedorinoFF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvFedorinoFF,
именно поэтому в своем unicode_faq я привел пример udf, обрабатывающей utf8, и дал комментарии, как это работает с базами или данными в Win1251.
Да, в том числе и этот faq я видел, и что-то от него подчерпнул. Но некоторые , для кого-то "явные" вещи, оставались неявными для меня. Кроме того, под линуксом были всякие неожиданности, да и под Windows, если играть чарсетами подключений, что-то бывало не айс. Потому, как наглядное пособие, состряпал картинку. Если она имеет право на жизнь, то может пригодиться коллегам.
...
Рейтинг: 0 / 0
UDF DLL 64 бит Delphi
    #38741156
FedorinoFF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovFedorinoFFну никак не понимаю как картинку вставлять.
Ну так не косплей блондинку, вставляй текст.
Да вроде разобрался. причина тут 16552238
...
Рейтинг: 0 / 0
UDF DLL 64 бит Delphi
    #38741183
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FedorinoFF Потому, как наглядное пособие, состряпал картинку.
при всей моей любви к диаграммам состояний (типа того), процесс работы с чарсетами в моей голове выглядит несколько иначе. И для этого картинки рисовать не обязательно :-)
по крайней мере, до сих пор картинки вроде этой никому не понадобились. А с появлением юникода как на клиенте, так и на сервере, необходимость в картинках отпала, т.к. все преобразования свелись к виду "чарсет А -> юникод -> чарсет А", если "чарсет А" вообще где-либо используется.
...
Рейтинг: 0 / 0
36 сообщений из 36, показаны все 2 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / UDF DLL 64 бит Delphi
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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