-
Я понимаю, что уже достал, но возникла нехорошие проблемы:
1.
library hppadd;
uses kol,windows;
procedure solo;
begin
end;
exports
solo;
begin
end.
при компиляции с помощью XE2 я получаю DLL, но либо при попытке загрузки её через LoadLibrary я получаю ошибку 487 (ERROR_INVALID_ADDRESS), либо какой-то код после выгрузки её через FreeLibrary выдает ошибку 216.
Кто-нибудь, помогите понять ,в чем дело!
2. Когда компиляция в ХЕ2 создавала загружаемую DLL.var Result:PGraphicTool (конкретно - PFont)
lf: TLogFontW (filled)
Result.AssignHandle(CreateFontIndirectW(lf));
компиляция в ХЕ2 DEBUG = всё нормально
компиляция в XE2 RELEASE или Delphi5 - AssignHandle не проходит. По крайней мере, lf.lfFaceName даёт одно имя фонта, Result.FontName - другое.
ПОЧЕМУ?! -
Дмитрий К © (27.07.12 20:55) [1]1. Для библиотеки нужно использовать символ NO_STRIP_RELOC.
2. Возможно, оптимизатор выкидывает то, что ему кажется ненужным. -
1. хм... похоже, реально релокейшены потерялись.... странно...
2. так, вроде, нечего там выкидывать. CreateFontIndirect проходит нормально. -
по п.1: пропустил в KOLDEF.inc строки:
{$IFNDEF NO_STRIP_RELOC}
// by Thaddy de Koning:
{$IFDEF _D2006orHigher}
// strips relocs, like stripreloc.exe does
{$SetPEFlags 1}
{$ENDIF}
{$ENDIF}
сейчас уберу, т.к. все равно только DLL делаю. большое спасибо! -
Насчет шрифтов в случае UNICODE_CTRLS всё, что я смог выяснить, это следующее:procedure TGraphicTool.AssignHandle(NewHandle: THANDLE);
begin
if fHandle <> 0 then //
DeleteObject( fHandle ); //
fHandle := NewHandle;
GetObject( fHandle, Sizeof( TGDIFont ), @ fData.Font );
Changed;
end;
Если оставить юникодный вариант GetObject, то работать не станет, а если заменить на анси вариант, всё воспринимается. Из сего я могу сделать вывод, что где-то всплывает Анси вместо юникода.... -
Проблема решена путем замены
result.AssignHandle(CreateFontIndirectW(@lf)))
на
result.LogFontStruct:=lf;