-
Новости от 23 апреля 2012 (KOL & MCK v3.18)
[+] Добавлен символ условной компиляции: PAS_ONLY. VK [+] Добавлена поддержка Delphi XE2 (изменения в KOLDEF.inc и KOL.PAS). Возможность создания приложений для платформы x64. VK
-
-
Исправил. Не положился вчера файл в архив, не знаю как ему удалось.
Да, еще. Для x64 или определяется символ PAS_ONLY, либо x64, + UNICODE_CTRLS, ну это для всех новых Delphi в любом случае нужно.
-
А у меня до сих пор 3.17 скачивается...
-
Все, поправил. Заблудился в двух компах. Надо было из расшаренной папки на машине с x64 бросать, а я все из привычной. Протормозил, в общем.
-
Как погляжу, определение Delphi XE2 в KOLDEF.INC по-прежнему оформлено как Delphi XE. Это все же ошибка или специально? а в определении Delphi XE строка {$DEFINE _DXEorHigher} идет два раза подряд
-
А я вот, смотрю и не вижу, чтобы где-то учитывалось, что Integer в x64 по-прежнему 4 байта, а Pointer - 8. Получается, "возможность создания приложений для платформы x64" - чисто теоретическая?
-
Integer 32 бита, это NativeInt 64. Но с указателями пока действительно проблема: в тех местах, где они без проверки трансформируются туда и обратно.
Вообще, мне надо было маленькую dll и маленькое приложение, без использования gui-интерфейса, просто поставить хук, чтобы он работал в 64-разрядных приложениях, плюс запускатель этой dll, тоже 64-разрядный. Обмен с основным приложением - через memory mapped файл (просто 4 байта). Работает. Так что не совсем теоретически.
Ну, а кому надо совсем не теоретически, начинайте пробовать, и слать свои предложения: что поправить, чтоб стало совсем правильно.
-
Fantastic news - thank you Vladimir! Does this also work with Free Pascal to produce x64 files or do we need to use KOL-CE?
-
Don't know, I did not try it. Anyway PAS_ONLY is necessary for x64 and UNICODE_CTRLS too (but I don't know if FPC can compile kol with UNICODE_CTRLS). Anyway Integer is 32 bit type for both FPCx32 and FPCx64, but Pointer is 64 bit when target platform is x64 as well as for Delphi XE2.
-
you can use simple procedures and functions for xe2 64, but not the visual part (tcontrol). also, it may be a good idea to change pasonly to "purepascal" since that is what xe2/64 uses by default. the main problem is that embarcadero defined integer as 32 bit, for kol controls to work, integer in api calls and pointers have to be redefined as ptrint (or nativeint). also, even in pascal mode, kol has assembler routines. they should be translated or removed. (most important: vmt related 2). but you can write 64 bit kol console applications, even with freepascal.
-
@VLadimir:, yes, it compiles ( with delphi 5 windows rtl part and other delphi with some small changes) in freepascal. needs some tweaking. undef fpc, def ver230, def unicode, def unicode_ctrls, def delphi, def not_use_richedit, def math_noerr. took a loooooooooooong time! But it works. xe2/32 bit works for kol without mck. xe2/64 only for console or direct winapi. so the library routines are OK, but the object needs some work.
-
about fpc: there is a small googlemaps application on my website that compiles with xe2/32 and fpc 2.7.1 from the same source. you need to alias windows=winapi.windows;wininet=winapi.wininet for xe2/32.
-
windows=winapi.windows;wininet=winapi.wininet must be: winapi.windows=windows;winapi.wininet=wininet;
-
windows=winapi.windows;wininet=winapi.wininet must be: winapi.windows=windows;winapi.wininet=wininet;
-
Под х64 вызов вида Format('[%.3d]%s%s', [1, '/', '/']) приводит к AV в функции wvsprintf
-
И да, до сих пор не вырезан {$SetPEFlags 1} в KOLDEF.INC, из-за которого build и compile проекта dll производят разные бинарники, один из которых (после билда) не загружается в принципе, из-за отрезанных релоков.
-
@speller: this is well documented in koldef.inc. It says you can't use this for dll's..... So it is not a bug.
-
От нечего делать, сегодня вновь поэкспериментировал с компиляцией KOL.pas разными компиляторами. Delphi 3 ругался на попытку конкатенации символа к строке, а FPC вообще выдал кучу ошибок на конструкции типа Pointer(integer()). В связи с этим вопрос, библиотекой KOL сейчас вообще кто-нибудь занимается? Вносит туда фиксы для 64 бит (и не только) или проект временно "застыл"?
-
че за порнуха? выделено жирным и в function MapFileRead такая же function MapFile( const Filename: AnsiString; var hFile, hMap: THandle ): Pointer;
var Sz, Hi: DWORD;
begin
Result := nil;
hFile := FileCreate( KOLString(Filename), ofOpenRead or ofOpenWrite or ofOpenExisting
or ofShareExclusive );
hMap := 0;
if hFile = INVALID_HANDLE_VALUE then Exit;
Sz := GetFileSize( hFile, @ Hi );
hMap := CreateFileMapping( hFile, nil, PAGE_READWRITE, Hi, Sz, nil );
if hMap = 0 then Exit;
if (Hi <> 0) or (Sz > $0FFFFFFF) then Sz := $0FFFFFFF;
Result := MapViewOfFile( hMap, FILE_MAP_READ, 0, 0, Sz );
end;
|