Конференция "KOL" » KOL+XE2 DLL проблемы [Delphi, Windows]
 
  • awkward © (27.07.12 13:48) [0]
    Я понимаю, что уже достал, но возникла нехорошие проблемы:
    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. Возможно, оптимизатор выкидывает то, что ему кажется ненужным.
  • awkward © (27.07.12 21:01) [2]
    1. хм... похоже, реально релокейшены потерялись.... странно...
    2. так, вроде, нечего там выкидывать. CreateFontIndirect проходит нормально.
  • awkward © (27.07.12 21:09) [3]
    по п.1: пропустил в KOLDEF.inc строки:
    {$IFNDEF NO_STRIP_RELOC}
     // by Thaddy de Koning:
     {$IFDEF _D2006orHigher}
     // strips relocs, like stripreloc.exe does
     {$SetPEFlags 1}
     {$ENDIF}
    {$ENDIF}

    сейчас уберу, т.к. все равно только DLL делаю. большое спасибо!
  • awkward © (28.07.12 00:21) [4]
    Насчет шрифтов в случае 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, то работать не станет, а если заменить на анси вариант, всё воспринимается. Из сего я могу сделать вывод, что где-то всплывает Анси вместо юникода....
  • awkward © (28.07.12 00:54) [5]
    Проблема решена путем замены
    result.AssignHandle(CreateFontIndirectW(@lf)))
    на
    result.LogFontStruct:=lf;
 
Конференция "KOL" » KOL+XE2 DLL проблемы [Delphi, Windows]
Есть новые Нет новых   [134427   +34][b:0][p:0.001]