![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
2 ECM: Насколько реально перепилить KOLIB под Kylix3 ?
uuzh © (2004-12-10 20:03:00)Для меня это было бы весьма актуально, т.к. пришлось писать сервак у которого вся инфа ложится под Firebird (Linux)
Готов попытаться сам, но скорее всего не обойтись без квалифицированной помощи автора.
Gandalf (2004-12-16 09:32:00) [1]Лучше все на мыло ;)
uuzh (2004-12-15 18:20:00) [2]2 Gandalf:
procedure TStrList.SetText(const S: string; Append2List: boolean);
var
P, TheLast : PChar;
L, I : Integer;
procedure AddTextBuf(Src: PChar; Len: DWORD);
var OldTextBuf, P: PChar;
I : Integer;
begin
if Src <> nil then
begin
OldTextBuf := fTextBuf;
GetMem( fTextBuf, fTextSiz + Len );
if fTextSiz <> 0 then
begin
System.Move( OldTextBuf^, fTextBuf^, fTextSiz );
for I := 0 to fCount - 1 do
begin
P := fList.fItems[ I ];
if (DWORD( P ) >= DWORD( OldTextBuf )) and
(DWORD( P ) < DWORD( OldTextBuf ) + fTextSiz) then
fList.fItems[ I ] := Pointer( DWORD( P ) - DWORD( OldTextBuf ) + DWORD( fTextBuf ) );
end;
FreeMem( OldTextBuf );
end;
System.Move( Src^, fTextBuf[ fTextSiz ], Len );
Inc( fTextSiz, Len );
end;
end;
begin
if not Append2List then Clear;
if S = '' then Exit;
L := fTextSiz;
AddTextBuf( PChar( S ), Length( S ) + 1 );
P := PChar( DWORD( fTextBuf ) + DWORD( L ) );
if fList = nil then
fList := NewList;
I := 0;
TheLast := P + Length( S );
while P^ <> #0 do
begin
Inc( I );
P := StrScanLen( P, #10, TheLast - P );{ #10 - CR+LF for Unix- style OS}
if P^ = #13 then
Inc( P );
end;
Inc( fCount, I );
if fList.fCapacity < fCount then
fList.Capacity := fCount;
P := PChar( DWORD( fTextBuf ) + DWORD( L ) );
while P^ <> #0 do
begin
fList.Add( P );
P := StrScanLen( P, #10, TheLast - P );{#10 - CR+LF for Unix}
if PChar( P - 1 )^ = #10 then
PChar( P - 1 )^ := #0;
if P^ = #13 then Inc(P);
end;
end;
ECM (2004-12-15 18:01:00) [3]З.Ы. Я там опечатался, конечно
Надо так
function TIBClientLib.isc_interprete(buffer: PChar;
status_vector: PPISC_STATUS): ISC_STATUS;
const
fProcName: PChar = 'isc_interprete'#0;
begin
Result := 0;
if not Assigned(f_isc_interprete) then begin
f_isc_interprete := GetProcAddr(fLibHandle,fProcName);
end;
if Assigned(f_isc_interprete) then
Result := f_isc_interprete(buffer,status_vector);
:)
uuzh (2004-12-15 17:52:00) [4]2 Gаndalf: Если имеется ввиду 'greetings.txt' то в сампле ниже он работает ;) То бишь добавление строк в лист происходит.
uuzh (2004-12-15 17:47:00) [5]2 Gandalf :
[uuzh@mcomm3 uuzh]$ locate libgds
/opt/interbase/lib/libgds.so.0
/opt/interbase/lib/libgds.so
/usr/lib/libgds.so
/usr/lib/libgds.so.0
uuzh (2004-12-15 17:44:00) [6]Попробую, Thx.
Gandalf (2004-12-15 17:25:00) [7]А такой файл точно есть?
2uuzh
Пришли фикс...
ECM (2004-12-15 17:14:00) [8]TIBClientLib.IscJump - пока можно исключить вообще.
Можно закрыть его с помощью {$IFDEF MSWINDOWS}
Далее надо перепахать все функции TIBClientLib.isc_XXXXX примерно следующим образом:
{$IFDEF MSWINDOWS}
function TIBClientLib.isc_interprete(buffer: PChar;
status_vector: PPISC_STATUS): ISC_STATUS;
const
fProcName: PChar = 'isc_interprete'#0;
asm
lea edx,[eax+f_isc_interprete]
mov ecx,[fProcName]
call IscJump
xor eax,eax
end;
{$ENDIF}
{$IFDEF LINUX}
function TIBClientLib.isc_interprete(buffer: PChar;
status_vector: PPISC_STATUS): ISC_STATUS;
const
fProcName: PChar = 'isc_interprete'#0;
begin
Result := 0;
if not Assigned(f_isc_interprete) then begin
f_isc_interprete := GetProcAddr(fLibHandle,fProcName);
if Assigned(f_isc_interprete) then
Result := f_isc_interprete(buffer,status_vector);
end;
end;
{$ENDIF}
uuzh (2004-12-15 16:17:00) [9]2 ECM:
Добавил в KOL (KOLKYLIX от Gandalf c его ftp) в интерфейсной части
function LoadLibrary(ModuleName: PChar): HMODULE;
function GetProcAddress(Module: HMODULE; Proc: PChar): Pointer;
function FreeLibrary(Module: HMODULE): LongBool;
Убрал фукцию Format из KOLIBase, KOLIBdb. Скомпилировал с
NO_MULTITHREAD (т.к не нашёл аналогов для InitializeCriticalSection и т.п), дошёл до TIBClientLib.IscJump:
relocation error: /usr/lib/libgds.so.0: undefined symbol: crypt
uuzh (2004-12-15 15:09:00) [10]2 Gandalf: Скачал, компилируется но...
Lst := KOL.NewStrList;
try
Lst.LoadFromFile('greetings.txt');
except
WriteLn('---Unable to load file');
end;
WriteLn('Lines in file:', Lst.Count);
в результате Lst.Count = 0;
Сам лист работает и если строки заносить типа:
procedure LoadList(filename:string; List:PStrList);
var
F:Text;
s: string;
begin
if not Assigned(List) then exit;
List^.Clear;
Assign(F,filename);
Reset(F);
repeat
ReadLn(F,s);
List^.Add(s);
until Eof(F);
Close(F);
end;
То всё ОК. К сожалению не смог просмотреть в чём трабл т.к. отладчик отваливается при попытке входа в Lst.LoadFromFile.
dmd (2004-12-15 09:12:00) [11]Посмотрите плиз как вот это поправить "undefined symbol: initPAnsiStrings". Возникает в тестовом проекте TestKOL.dpr после
ковертации через kylix-qt.sh
Gandalf (2004-12-14 21:55:00) [12]Так-с это у кого KOL не портиться под Kylix. С первого прохода без ручной правки - лежит на фтп - уже "отпорченый" и все что нужно. Про MCK говорить рано. Визуальность я в принципе для базовых контролов типа Button,EditBox,ListBox,ComboBox,Memo и т.п. сделал. Ini,Thread,Timer - надо переписывать с нуля, диалоги тоже - про мульти окна не говорю - есть чем заняться - но многое пашет. Есть еще пару багов со строками. Если есть конкретные проблемы - чиркани на почту - для меня сейчас актуально KOL+Kylix + БД (правда MySQL - и их под Kylix/"KOL" я уже добыл) - как и ICS - потому движем знамя по тихоньку. Я правлю до тех пор пока мои потребности гонят :)
uuzh (2004-12-13 18:36:00) [13]PS: Над mirror для Kylix даже не надеюсь :)))) (по крайней мере в ближайшем обозримом будущем)
uuzh (2004-12-13 18:33:00) [14]2 ECM: 2-й день после работы бьюсь над KOL (под Kylix). Если Gandalf © что-нить присоветует то это будет резкое ускорение процесса :)
ECM (2004-12-13 18:10:00) [15]2 uuzh
В доработке KOLIB до совместимости с Linux (я бы это так назвал)
вижу пару моментов:
- доработать в первую очередь KOLIBase.pas кодом с условной компиляцией. Зачатки этого там есть - остальное по-моему не сложно (если пока не связываться с ассемблером).
- KOLIBdb.pas думаю должен пойти без изменений...
- Достаточно тесно завязан на Win - KOLIBEvents.pas. Там необходимо будет придумать какой-нибудь метод вместо IdleHandler. Но это тоже не проблема.. ИМХО..
Главное - это основа всего этого - KOL - :)
uuzh (2004-12-13 17:20:00) [16]2 Gandalf ©: Да, толком GlueCut KOL под Kylix не портирует. :(
Даже чтоб портануть только PObj и иже сним (в версии KOL 2.02) приходится править ручками. О PControl не говорю, т.к. Brush содержит HBitmap и потому QT его не понимает.
Если "маю час та надхнення" (имею время и вдохновение по-русски) то очччччень бы даже ...
Потому как чтоб портануть KOLIB желательно иметь KOL.
C признательностью за проявленное внимание и дружеское участие uuzh.
dmd (2004-12-12 10:31:00) [17]ждем как из печки пирога ))
Gandalf (2004-12-12 00:01:00) [18]Реально - могу по содействовать в развитии KOL-Kylix порта, вернее в доведении его до ума - там есть что поправить, даже на уровне консоли.
ECM (2004-12-11 10:53:00) [19]С удовольствием помогу... занялся бы сам - но времени сейчас ставить Linux и Kilyx нет (конец года сроки горят). Если замешься - будет огромная благодарность :)
Пиши на мыло - буду помогать...