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

Обсуждение в разделе «С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby», начал(-а) DooD, 16.09.2013.

Статус темы:
Тема закрыта для ответов.
  1. DooD

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

    Регистрация:
    30.09.2010
    Сообщения:
    1 168
    Одобрения:
    443
    Репутация:
    288
    есть x64 битное приложение.есть 32 битная длл-ка которая ставит хук на определенное событие.в 32 битках все работает корректно.64 битное застопоряется пока не убьешь его вручную.просто интересно, получается все 32 разрядные процессы работают через эмулятор wow64 и не могут загружать 64 разрядные модули и наоборот.получается единственным решением является компиляции dll 64 разрядным компилем?
    пысы: а у делфи есть такой вообще :D
     
  2. qw1mb1

    qw1mb1 Member

    Регистрация:
    8.02.2013
    Сообщения:
    113
    Одобрения:
    16
    Репутация:
    8
    Delphi XE2
    [​IMG]
    [​IMG]
     
    Это одобряет 1 пользователь.
  3. DooD

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

    Регистрация:
    30.09.2010
    Сообщения:
    1 168
    Одобрения:
    443
    Репутация:
    288
    как насчет переноса проекта с 7?можно просто откомпилить в х64?
     
  4. antichar

    antichar New Member

    Регистрация:
    11.09.2013
    Сообщения:
    45
    Одобрения:
    2
    Репутация:
    0
    А почем нет? Выбрать платформу, как в посте выше, и скомпилить.
     
  5. Jingo Bo

    Jingo Bo Member

    Регистрация:
    25.10.2009
    Сообщения:
    368
    Одобрения:
    51
    Репутация:
    7
    Ну не все так просто. Если просто так взять, добавить платформу и пересобрать, то можно получить немного не то что ожидалось, все дело в нативных типах. К примеру Integer в x64 будет уже 64 бита и если нужна независимо от платформы переменная 32 бит, то там нужен Longint. Так что нужно проверить все переменные Integer, Cardinal.

    Так же, если переходить с 7-ки, то нужно обратить внимание на строковые и символьные переменные, т.к. там Unicode и весить они соответственно в памяти будут в 2 раза больше.
     
    #5 Jingo Bo, 18.09.2013
    В последний раз редактировалось: 18.09.2013
    Это одобряет 1 пользователь.
  6. herfleisch

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

    Регистрация:
    7.01.2009
    Сообщения:
    579
    Одобрения:
    203
    Репутация:
    13
    Jingo Bo правильно все написал.

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

    antichar New Member

    Регистрация:
    11.09.2013
    Сообщения:
    45
    Одобрения:
    2
    Репутация:
    0
    С каких это пор Integer превратился в 64 бита? :)
    Если что и надо проверять, то типы вроде NativeInt и NativeUInt, а также их алиасы вроде LPARAM или WPARAM.
     
  8. antichar

    antichar New Member

    Регистрация:
    11.09.2013
    Сообщения:
    45
    Одобрения:
    2
    Репутация:
    0
    В паскалях тоже есть типы данных с фиксированным размером, который не меняется в зависимости от платформы.
     
  9. Jingo Bo

    Jingo Bo Member

    Регистрация:
    25.10.2009
    Сообщения:
    368
    Одобрения:
    51
    Репутация:
    7
    Да тут тоже есть как говорили выше, просто тут два типа получаются мутными, это Integer и Cardinal.
    Да, Integer там 64 бит.
     
    Это одобряет 1 пользователь.
  10. antichar

    antichar New Member

    Регистрация:
    11.09.2013
    Сообщения:
    45
    Одобрения:
    2
    Репутация:
    0
    Нет в них ничего мутного.
    Integer - signed 32-bit integer
    Cardinal - unsigned 32-bit integer
     
  11. Jingo Bo

    Jingo Bo Member

    Регистрация:
    25.10.2009
    Сообщения:
    368
    Одобрения:
    51
    Репутация:
    7
    Я погуглил за тебя: http://articles.org.ru/delphispr/Integer.php
     
  12. antichar

    antichar New Member

    Регистрация:
    11.09.2013
    Сообщения:
    45
    Одобрения:
    2
    Репутация:
    0
    Можно и не гуглить, все в справке написано:
     
Статус темы:
Тема закрыта для ответов.