как устранить проблему с x64

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by DooD, 16 Sep 2013.

Thread Status:
Not open for further replies.
  1. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    442
    Reputations:
    288
    есть x64 битное приложение.есть 32 битная длл-ка которая ставит хук на определенное событие.в 32 битках все работает корректно.64 битное застопоряется пока не убьешь его вручную.просто интересно, получается все 32 разрядные процессы работают через эмулятор wow64 и не могут загружать 64 разрядные модули и наоборот.получается единственным решением является компиляции dll 64 разрядным компилем?
    пысы: а у делфи есть такой вообще :D
     
  2. qw1mb1

    qw1mb1 Member

    Joined:
    8 Feb 2013
    Messages:
    113
    Likes Received:
    16
    Reputations:
    8
    Delphi XE2
    [​IMG]
    [​IMG]
     
    1 person likes this.
  3. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    442
    Reputations:
    288
    как насчет переноса проекта с 7?можно просто откомпилить в х64?
     
  4. antichar

    antichar New Member

    Joined:
    11 Sep 2013
    Messages:
    45
    Likes Received:
    2
    Reputations:
    0
    А почем нет? Выбрать платформу, как в посте выше, и скомпилить.
     
  5. Jingo Bo

    Jingo Bo Member

    Joined:
    25 Oct 2009
    Messages:
    368
    Likes Received:
    51
    Reputations:
    7
    Ну не все так просто. Если просто так взять, добавить платформу и пересобрать, то можно получить немного не то что ожидалось, все дело в нативных типах. К примеру Integer в x64 будет уже 64 бита и если нужна независимо от платформы переменная 32 бит, то там нужен Longint. Так что нужно проверить все переменные Integer, Cardinal.

    Так же, если переходить с 7-ки, то нужно обратить внимание на строковые и символьные переменные, т.к. там Unicode и весить они соответственно в памяти будут в 2 раза больше.
     
    #5 Jingo Bo, 18 Sep 2013
    Last edited: 18 Sep 2013
    1 person likes this.
  6. herfleisch

    herfleisch Elder - Старейшина

    Joined:
    7 Jan 2009
    Messages:
    579
    Likes Received:
    203
    Reputations:
    13
    Jingo Bo правильно все написал.

    Не знаю как в ваших паскалях оно там исправляется, но в сях есть специальные платформонезависимые типы: int8_t, uint16_t, uint32_t, где ты явно указываешь сколько байт выделять под число.
     
  7. antichar

    antichar New Member

    Joined:
    11 Sep 2013
    Messages:
    45
    Likes Received:
    2
    Reputations:
    0
    С каких это пор Integer превратился в 64 бита? :)
    Если что и надо проверять, то типы вроде NativeInt и NativeUInt, а также их алиасы вроде LPARAM или WPARAM.
     
  8. antichar

    antichar New Member

    Joined:
    11 Sep 2013
    Messages:
    45
    Likes Received:
    2
    Reputations:
    0
    В паскалях тоже есть типы данных с фиксированным размером, который не меняется в зависимости от платформы.
     
  9. Jingo Bo

    Jingo Bo Member

    Joined:
    25 Oct 2009
    Messages:
    368
    Likes Received:
    51
    Reputations:
    7
    Да тут тоже есть как говорили выше, просто тут два типа получаются мутными, это Integer и Cardinal.
    Да, Integer там 64 бит.
     
    1 person likes this.
  10. antichar

    antichar New Member

    Joined:
    11 Sep 2013
    Messages:
    45
    Likes Received:
    2
    Reputations:
    0
    Нет в них ничего мутного.
    Integer - signed 32-bit integer
    Cardinal - unsigned 32-bit integer
     
  11. Jingo Bo

    Jingo Bo Member

    Joined:
    25 Oct 2009
    Messages:
    368
    Likes Received:
    51
    Reputations:
    7
    Я погуглил за тебя: http://articles.org.ru/delphispr/Integer.php
     
  12. antichar

    antichar New Member

    Joined:
    11 Sep 2013
    Messages:
    45
    Likes Received:
    2
    Reputations:
    0
    Можно и не гуглить, все в справке написано:
     
Thread Status:
Not open for further replies.