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

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

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

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

Код: 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
06.11.2017, 19:40
    #39548542
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
udf 32->64
Ужоснах. Мне даже лень вспоминать размерность Longint в дельфях при виде такого.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
06.11.2017, 19:44
    #39548544
konstsch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
udf 32->64
в чем ужас?
...
Рейтинг: 0 / 0
06.11.2017, 20:00
    #39548547
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
udf 32->64
konstschв чем ужас?

А, нет, извини, оно и в С заголовках так объявлена. За исключением WordBool, который
совсем не к месту.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
06.11.2017, 20:12
    #39548549
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
udf 32->64
Я недавно напоролся на бага с хэндлами на 64-х разрядах и теперь нервно отношусь к
хэндлам, объявленным как указатели.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
07.11.2017, 00:52
    #39548657
konstsch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
udf 32->64
Вроде как от БД получает то что нужно только вот с этим непонятно:
Код: 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
07.11.2017, 02:34
    #39548675
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
udf 32->64
konstschстроки не передаю и не использую
есть только указатель pcharЕсли где-то будет каст (даже неявный) к String - он будет воспринят как WideString.
...
Рейтинг: 0 / 0
07.11.2017, 11:11
    #39548802
konstsch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
udf 32->64
Заменил на 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
07.11.2017, 11:14
    #39548804
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
udf 32->64
konstsch,

ты тут какие-то отдельные куски выкладываешь. Думаешь по ним ясно где у тебя ошибка?
...
Рейтинг: 0 / 0
07.11.2017, 11:35
    #39548828
konstsch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
udf 32->64
Код: 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
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / udf 32->64 / 25 сообщений из 36, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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