powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / udf 32->64
25 сообщений из 36, страница 1 из 2
udf 32->64
    #39547760
Фотография konstsch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть UDF написанные еще на Delphi7 (исходники есть)
В чем можно без особых усилий перенести их на x64?
...
Рейтинг: 0 / 0
udf 32->64
    #39547763
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FPC с mode delphi.
Там есть нюансы, но обычно всё работает как ожидалось.
...
Рейтинг: 0 / 0
udf 32->64
    #39547772
Introducer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
konstschЕсть UDF написанные еще на Delphi7 (исходники есть)
В чем можно без особых усилий перенести их на x64?
Можно в Delphi XE2 и выше. Могу помочь перенести, без особых усилий :)
...
Рейтинг: 0 / 0
udf 32->64
    #39547775
Фотография konstsch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fpc явно не в тему, модуль таких в нем нет
...
Рейтинг: 0 / 0
udf 32->64
    #39547782
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
konstschfpc явно не в тему, модуль таких в нем нетНу, тебе лучше знать.
...
Рейтинг: 0 / 0
udf 32->64
    #39547848
Фотография konstsch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скомпилировал в дельфи 10 берлин
библиотечка потяжелела в 10 раз
...
Рейтинг: 0 / 0
udf 32->64
    #39547852
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
konstsch,

ну.. если ты там внутри DLL использовал VCL то верю
...
Рейтинг: 0 / 0
udf 32->64
    #39547910
Фотография konstsch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В итоге запрос с УДФ просто виснет.
В логе серевера ошибок нет..
...
Рейтинг: 0 / 0
udf 32->64
    #39547912
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нормальное поведение при вечном цикле, например. Логирование внутри функции поможет.
...
Рейтинг: 0 / 0
udf 32->64
    #39547968
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выкинуть нах и забыть аки страшный сон предлагали?
Делают-то УДФки хоть полезное что или просто жаль выбросить?
...
Рейтинг: 0 / 0
udf 32->64
    #39548289
Фотография konstsch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ресайз картинок
...
Рейтинг: 0 / 0
udf 32->64
    #39548298
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
konstsch,

это по хорошему на клиенте делать надо. Не фиг север раздувать
...
Рейтинг: 0 / 0
udf 32->64
    #39548302
Фотография konstsch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
10 лет раздувался раздувался так и не лопнул
...
Рейтинг: 0 / 0
udf 32->64
    #39548323
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
konstsch,

ну а чего ты хочешь. Картинку небось сжимал с помощью компонентов VCL. Так они в последних дельфях на порядок толще стали.
Да и геморройно это учитываю что менеджеры памяти firebird и delphi абсолютно разные.
Ты уже учёл, что в новых Delphi строки юникодные по умолчанию?
...
Рейтинг: 0 / 0
udf 32->64
    #39548533
Фотография konstsch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
строки не передаю и не использую
есть только указатель pchar
...
Рейтинг: 0 / 0
udf 32->64
    #39548540
Фотография konstsch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а с этими типами все так же осталось?

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
type
  Long      = Longint;     // Integer

 TBLOb = record
   GetSegment: function(Handle: Pointer; Buffer: PChar; MaxLength: Word; var ReadLength: Word): WordBool; cdecl;
   Handle: Pointer; // BLOb handle
   SegCount, // Number of BLOb segments
   MaxSegLength, // Max length of BLOb segment
   TotalLength: Long; // Total BLOb length
   PutSegment: procedure(Handle: Pointer; Buffer: PChar; Length: Word); cdecl;
   Seek: function(Handle: Pointer; mode :Word; offset : Long): Long; cdecl; // а я знаю входные параметры...
 end;  
...
Рейтинг: 0 / 0
udf 32->64
    #39548542
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ужоснах. Мне даже лень вспоминать размерность Longint в дельфях при виде такого.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
udf 32->64
    #39548544
Фотография konstsch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в чем ужас?
...
Рейтинг: 0 / 0
udf 32->64
    #39548547
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
konstschв чем ужас?

А, нет, извини, оно и в С заголовках так объявлена. За исключением WordBool, который
совсем не к месту.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
udf 32->64
    #39548549
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я недавно напоролся на бага с хэндлами на 64-х разрядах и теперь нервно отношусь к
хэндлам, объявленным как указатели.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
udf 32->64
    #39548657
Фотография konstsch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вроде как от БД получает то что нужно только вот с этим непонятно:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
var
 iStream: TMemoryStream;

   try
     iStream.WriteBuffer(i^, size);   //размер верный
     iStream.Position:=0;
     iStream.SaveToFile('d:\1\fl.jpg');  // но в файл пишет с какими то пробелами что ли
     iStream.Position:=0;
     try
     jp.LoadFromStream(iStream);  // тут падает  
     //Access violation at address 0000000004E07B0E in module 'bl.dll'. Read of address FFFFFFFFFFFFFFFF
  except


пишет в файл так с 0000 до 0048 пишет нормальные данные
с 0050 до 0098 все нули
с 0100 до 00e8 нормальные данные
потом опять нули и так далее

p.s. использовал lazarus
...
Рейтинг: 0 / 0
udf 32->64
    #39548675
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
konstschстроки не передаю и не использую
есть только указатель pcharЕсли где-то будет каст (даже неявный) к String - он будет воспринят как WideString.
...
Рейтинг: 0 / 0
udf 32->64
    #39548802
Фотография konstsch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Заменил на PAnsiChar
прошло дальше до:
Код: pascal
1.
with oBLOb do PutSegment(Handle, Buffer, ReadLength);


point_18_Buffer= яШяа
point_18_ReadLength = 5587
point_18_Handle = 84026616
point_18_except Access violation at address 00000000052CA224 in module 'bl.dll'. Read of address FFFFFFFFFFFFFFFF

и буфер не пустой
и длинна есть но вылетает с ошибкой
...
Рейтинг: 0 / 0
udf 32->64
    #39548804
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
konstsch,

ты тут какие-то отдельные куски выкладываешь. Думаешь по ним ясно где у тебя ошибка?
...
Рейтинг: 0 / 0
udf 32->64
    #39548828
Фотография konstsch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
 TBLOb = record
   GetSegment: function(Handle: Pointer; Buffer: PAnsiChar; MaxLength: Word; var ReadLength: Word): WordBool; cdecl;
   Handle: Pointer; // BLOb handle
   SegCount, // Number of BLOb segments
   MaxSegLength, // Max length of BLOb segment
   TotalLength: Long; // Total BLOb length
   PutSegment: procedure(Handle: Pointer; Buffer: PAnsiChar; Length: Word); cdecl;
   Seek: function(Handle: Pointer; mode :Word; offset : Long): Long; cdecl; 
 end;


const
  MaxBLObPutLength = 80;
  MaxBufSize = 32768;



Код: pascal
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.
//  fast resize  /////////////////////////////////////////////
//////////////////////////////////////////////////////////////
//x - x resolution                                          //
//y - y resolution                                          //
//iBlob - input BLOB                                        //
//oBlob - output BLOB                                       //
//////////////////////////////////////////////////////////////

procedure ResizeImageXY(var x: integer; var y: integer; var iBLOb: TBLOb; var oBLOb: TBLOb); cdecl; export;
var
 iBuf, buffer: PAnsiChar;
 ReadLength, StreamSize, BufSize: integer;
 stream: TStream;
begin
  with iBLOb do if (not Assigned(Handle)) or (TotalLength = 0) then Exit;
  Stream:=TMemoryStream.Create;
  try
    GetMem(iBuf, iBlob.TotalLength+1);
    try
      FillBuffer(iBLOb, iBuf, iBlob.TotalLength, ReadLength);
      ConvImageXY(x, y, ibuf, ReadLength, Stream);
      //procedure ConvImageXY(x, y:integer; i: PAnsiChar; size: integer; var o: TStream);
    finally
      FreeMem(iBuf);
    end;
    StreamSize := Stream.Size;
    Stream.Position:=0;
    if StreamSize > MaxBufSize then BufSize := MaxBufSize else BufSize := StreamSize;
    GetMem(Buffer, BufSize);
    try
      if StreamSize > BufSize then ReadLength := BufSize else ReadLength := StreamSize;
      Stream.ReadBuffer(Buffer^, ReadLength);
      with oBLOb do PutSegment(Handle, Buffer, ReadLength);   /// здесь вылетает
      Dec(StreamSize, ReadLength);
    finally
        FreeMem(Buffer, BufSize);
    end;
  finally
   Stream.Free;
  end;
end;
...
Рейтинг: 0 / 0
25 сообщений из 36, страница 1 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / udf 32->64
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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