Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

Кто-нибудь компилировал tpapro407 под 2009 или 2010 Делфи?   Найти похожие ветки 

 
Kolan ©   (2010-01-15 12:50) [0]

A407_R100.bpl не компилиться под 2009, говорит
[DCC Error] OoMisc.pas(2687): E2100 Data type too large: exceeds 2 GB на строке TOBuffer = array[0..pred(High(Integer))] of Char;.


 
clickmaker ©   (2010-01-15 12:53) [1]

может, воспринимает как беззнаковое?


 
pasha_golub ©   (2010-01-15 13:02) [2]

Чуваки :)

TOBuffer = array[0..pred(High(Integer))] of AnsiChar;


 
pasha_golub ©   (2010-01-15 13:03) [3]

Хотя я прогнал :))

У меня рефлекс везде в 2010 заменять на AnsiChar


 
Kolan ©   (2010-01-15 13:29) [4]


> может, воспринимает как беззнаковое?

Не понял, в каком месте?


 
Kolan ©   (2010-01-15 13:31) [5]

Да, очевидно, что это компонент для 2007 Делфи, где не было юникода и нужно Char везде заменить на AnsiChar, но как не пропустить, его там полно...


 
clickmaker ©   (2010-01-15 13:31) [6]

блин, это же уникод, точно.
массив из 2 гигов уникодных чаров займет 4 гига


 
clickmaker ©   (2010-01-15 13:33) [7]

> нужно Char везде заменить на AnsiChar

как альтернатива - array[0..pred(High(Integer) div 2)]


 
Kolan ©   (2010-01-15 13:38) [8]

Да там-то 20-30 модулей, там везде этот чар. Может как-то разом переопределить можно?


 
clickmaker ©   (2010-01-15 13:49) [9]

а что, неужели в д2009 нет замены во всем проекте?


 
Игорь Шевченко ©   (2010-01-15 14:15) [10]


> Да там-то 20-30 модулей


а ты не ленись


 
Kolan ©   (2010-01-15 14:22) [11]

Я не ленюсь, я накосячить непонятно где боюсь.


 
clickmaker ©   (2010-01-15 14:26) [12]

и в этих 20-30 модулях прямо таки дохрена этих самых array[0..pred(High(Integer))] ?


 
Kolan ©   (2010-01-15 14:35) [13]

Обсуждение проблемы на оф. форуме:
http://sourceforge.net/projects/tpapro/forums/forum/241883/topic/2212505

Нет, clickmaker, там просто Char много где используется в качестве Byte...


 
Игорь Шевченко ©   (2010-01-15 14:35) [14]


> Я не ленюсь, я накосячить непонятно где боюсь.


а чего собственно косячить ? У тебя объявлен тип, тип, я надеюсь, объявлен один раз, ну и замени его объявление. Дальше он будет только использоваться.
Собственно, если ты немного задумаешься (весьма полезное занятие), то поймешь, что такие типы объявлены для разыменования указателя в массив и реальных массивов такого типа быть не может по определению. Поэтому что array[0..High(Integer)] of char, что array[0..High(Integer) div 4] of AnsiChar имеют одинаковый смысл. Причем, первый вариант чреват глюками, так как операции с массивом (даже разыменованным) такого типа подразумевают, что каждый элемент имеет размер 2 байта (а не один, по мнению создателей компонента)


 
clickmaker ©   (2010-01-15 14:39) [15]

> там просто Char много где используется в качестве Byte

ну молодцы, что тут сказать.
они, видимо, и не мечтали, что когда-нибудь в Д появится уникод )


 
Kolan ©   (2010-01-15 14:48) [16]

Итак, официальной поддержки 2009-го Делфи нет и не планируется, однако, на этой странице есть переделанный пакет
http://www.songbeamer.com/delphi/

Который компилируется и ставится нормально.

Благодарю за обсуждение.


 
Anatoly Podgoretsky ©   (2010-01-15 16:48) [17]

Подобного рода ошибки делаю многие, почему то предполагают, что размер 1 байт, хотя в документации не так.

> The generic character type is Char, which is equivalent
> to AnsiChar. Because the implementation of Char is subject
> to change, it"s a good idea to use the standard function
> SizeOf rather than a hard-coded constant when writing programs
> that may need to handle characters of different sizes.


> AnsiString   ~2^31 characters   4 bytes to 2GB   8-bit (ANSI)
> characters, DBCS ANSI, MBCS ANSI, etc.
> WideString   ~2^30 characters   4 bytes to 2GB   Unicode
> characters; multi-user servers and multi-language applications


 
Anatoly Podgoretsky ©   (2010-01-15 16:51) [18]

Надо было объявлять (2gb-1) div SizeOf(Char)


 
clickmaker ©   (2010-01-15 16:53) [19]

надо было объявлять array[0..pred(High(Integer))] of byte


 
Kolan ©   (2010-01-16 11:51) [20]

В переделанном модуле, кстати на АнсиЧас заменено.
TOBuffer = array[0..pred(High(Integer))] of AnsiChar;


 
Германн ©   (2010-01-16 12:30) [21]


> Kolan ©   (15.01.10 14:48) [16]
>
> Итак, официальной поддержки 2009-го Делфи нет и не планируется

Пардон. Какая нафиг официальная поддержка?


 
Kolan ©   (2010-01-16 13:25) [22]

Официальная — это поддержка разработчиков.

Замечу, что доработанный набор, ссылку на который я привел выше, работает не корректно. В частности зэд-модем не может сохранить полученный файл из-за того что путь к нему составляется не верно и код:
Assign(aWorkFile, aPathName);
Reset(aWorkFile, 1);
Result := IOResult;


Завершается с ошибкой 123.


 
Kolan ©   (2010-01-16 13:39) [23]

Если кому понадобится — сообщаю, что ошибку с именем файла я исправил.

Причина была в том, что в одном месте посылалось такое сообщение:

function apMsgAcceptFile(P : PProtocolData; FName : PAnsiChar) : Bool;
...
     Res := SendMessage(aHWindow, apw_ProtocolAcceptFile, 0, LongInt(FName));


А при его получении срабатывал такой код:

APW_PROTOCOLACCEPTFILE  :
           begin
             FName := StrPas(PChar(lParam));
             apwProtocolAccept(P, Accept, FName);
             if Accept then begin
               if FileName <> "" then
                 StrPCopy(PChar(lParam), FName);
               Result := 1;
             end else
               Result := 0;
           end;


Как видите, при отсылке отсылался указатель на PAnsiChar, а при получении он трактовался как PChar, который теперь юникодовый.

Ошибка исправлена так:

APW_PROTOCOLACCEPTFILE  :
           begin
             FName := StrPas(PAnsiChar(lParam));
             apwProtocolAccept(P, Accept, FName);
             if Accept then begin
               if FileName <> "" then
                 StrPCopy(PAnsiChar(lParam), FName);
               Result := 1;
             end else
               Result := 0;
           end;


Однако сколько там еще таких сюрпризов — одному богу известно.


 
Kolan ©   (2010-01-16 13:46) [24]

А нельзя ли как-то в режиме совместимости скомпилить эти компоненты?


 
GanibalLector ©   (2010-01-16 17:06) [25]

Собственно, а что ты от модема хочешь ?
Я обычно обходился без всяких tpapro407  и нормально все работало.

З.Ы. А как же "домашка" )) ?


 
Псалтырь ©   (2010-01-16 20:34) [26]

Колян, берешь по всему коду ищешь строки, PChar"ы и Char"ы и меняешь их на Ansi аналоги. День помучаешься, зато всё будет работать. Я гарантирую это.

Ваш Кэп.


 
Anatoly Podgoretsky ©   (2010-01-16 21:03) [27]

> Псалтырь  (16.01.2010 20:34:26)  [26]

Нельзя все менять, к процессу надо подойти творчески.


 
Германн ©   (2010-01-17 00:51) [28]


> Псалтырь ©   (16.01.10 20:34) [26]
>
> Колян, берешь по всему коду ищешь строки, PChar"ы и Char"ы
> и меняешь их на Ansi аналоги. День помучаешься, зато всё
> будет работать. Я гарантирую это.

Ты уверен что только один
> День помучаешься

в случае с продуктом бывшей фирмы TurboPower?


 
Anatoly Podgoretsky ©   (2010-01-17 00:53) [29]

> Германн  (17.01.2010 00:51:28)  [28]

Учитывая, что этот продукт относится к спорным местам, где неодназначно нужно ли менять на String, AnsiString, UnicodeString


 
Германн ©   (2010-01-17 00:58) [30]


> Anatoly Podgoretsky ©   (17.01.10 00:53) [29]
>
> > Германн  (17.01.2010 00:51:28)  [28]
>
> Учитывая, что этот продукт относится к спорным местам, где
> неодназначно нужно ли менять на String, AnsiString, UnicodeString

+1
Вот только сегодня днем разговаривал с приятелем, с которым вместе много лет работали в одной конторе и возможно ещё поработаем вместе в другой. И вспоминал я именно этот случай.


 
Anatoly Podgoretsky ©   (2010-01-17 01:16) [31]

Вот наглядный пример, скажем FileName обязан быть string, а не AnsiString, в другом случае почти все что связано с передачей через Internet должно быть или AnsiString, или Utf8String поскольку большинство протоколо даже не 8 битные, а 7 битные и приходится применять разного рода трансформации. В тоже время вся Инди состоит из String, а им стыдно, ведь это сетевая библиотека и кому как не им знать, что применение generic типов неправильно, должен быть указан фундаментальный тип AnsiString IB/FB везде указан тип string даже для полей CHAR/VarChar, но здесь хоть несмертельно, но может поставить в тупик, почему некоторые введеные символы превращаются в знаки вопроса и ненужные лишнии преобразования на уровне сервера с nvarchar в varchar и обратно.
Если с Инди понятно, халява и авторов трудно заставить, то библиотеки IB/FB по всей видимости от CodeGear - это иначе как наплевательским отношением не назовешь. Я думаю тагого рода ситуаций в генофонде больше, чем я знаю. И узнавать их придется собственной шкурой.


 
Anatoly Podgoretsky ©   (2010-01-17 01:20) [32]

Я смотрел исходники, как Пьетте (ICS) адаптировал свой продукт, вот он подошел творчески к этому дело, а ведь мог бы просто объявить все AnsiChar. Это пример ответсвенного отношения.


 
Германн ©   (2010-01-17 01:31) [33]


> Anatoly Podgoretsky ©   (17.01.10 01:20) [32]
>
> Я смотрел исходники, как Пьетте (ICS) адаптировал свой продукт,
>  вот он подошел творчески к этому дело, а ведь мог бы просто
> объявить все AnsiChar. Это пример ответсвенного отношения.
>

Поэтому простим ему то, что он полностью плюнул на хелп. Франсуа и так тянет как битюг. Причём бесплатно!


 
Anatoly Podgoretsky ©   (2010-01-17 02:20) [34]

> Германн  (17.01.2010 01:31:33)  [33]

Он не плевал, он просто не хочет его делать, тот хелп, что есть на его сайте сделан не им.


 
Германн ©   (2010-01-17 02:38) [35]


> Anatoly Podgoretsky ©   (17.01.10 02:20) [34]
>
> > Германн  (17.01.2010 01:31:33)  [33]
>
> Он не плевал, он просто не хочет его делать

Ну и я о том же!
Я тоже не хочу делать хелп.
С хелпом та ещё морока!


 
Кто б сомневался ©   (2010-01-17 03:06) [36]


>  на строке TOBuffer = array[0..pred(High(Integer))] of Char;
> .


ОГО,
А где это можно такой "ахринительно" здоровенный буфер на 2 гига юзать?
Я аж теряюсь...
Не серьезно? Для каких целей?


 
Anatoly Podgoretsky ©   (2010-01-17 12:42) [37]

> Кто б сомневался  (17.01.2010 03:06:36)  [36]

До создание еще дело не доходило и не дойдет, речь вообще про компиляцию. Да и не буфер это наверно, а тип.


 
Kolan ©   (2010-01-21 12:38) [38]

Аналогичная проблема есть и для закачки, смотрите
SendMessageTimeout(aHWindow, apw_ProtocolNextFile, 0,
                        Longint(FName),
                        SMTO_ABORTIFHUNG + SMTO_BLOCK,
                        1000, Res);


и

APW_PROTOCOLNEXTFILE    :
           begin
             FName := "";
             apwProtocolNextFile(P, FName);
             if FName <> "" then begin
               StrPCopy(PAnsiChar(lParam), FName);
               Result := 1;
             end else
               Result := 0;
           end;


Соответственно.


 
Kolan ©   (2010-01-22 10:15) [39]

Еще добавлю, что при использовании сабжевого модуля Д2009 может заглючить и он будет видеть множество ошибок (компиля при этом проект нормально).

Проблема в том, что в Д2009 были переименованы некоторые модули, причем компилятору известны новые аналоги, а среде нет. Вылечить можно прописав алиасы в настройках проекта. Подробнее смотрите http://www.brainrage.com/?p=98


 
Anatoly Podgoretsky ©   (2010-01-22 12:09) [40]

> Kolan  (22.01.2010 10:15:39)  [39]

При наличии хотя бы одной ошибки проет никак откомпилирован не будет, ты просто раньше старый экзешник то соотри.



Страницы: 1 2 вся ветка

Текущий архив: 2010.08.27;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.064 c
15-1272740317
adav84
2010-05-01 22:58
2010.08.27
может ли ATTiny13 делать FFT в realtime?


2-1268575722
vovka-x13
2010-03-14 17:08
2010.08.27
Определение текущей страницы в браузера


2-1271150334
Гость
2010-04-13 13:18
2010.08.27
Try Finally Try Except а оно надо?


2-1266336508
Pavel
2010-02-16 19:08
2010.08.27
Подключение к MS SQL Server


15-1266214599
Дмитрий С
2010-02-15 09:16
2010.08.27
У вас работает virtual treeview в delphi2010?