Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.08.2011, 17:29   #1
phphel
Форумчанин
 
Аватар для phphel
 
Регистрация: 12.07.2010
Сообщений: 249
По умолчанию Определение разрядности (битности) программы.

Определение разрядности (битности) программы.

Вобщем возник такой вопрос (возможно глупый, не исключаю ), как определить разрядность той или иной программы?
Тоесть 64 или 32, как это делает task manager в windows 7 (64-x).



И еще вопрос, сейчас скинул другу программу собранную под delphi 7 в 64 разрядной windows 7.
И у него не запустилось (приложение не является win32 совместимым) на windows vista.
Как такое может быть?Или с какой ОС компилируешь такая битность и будет?

Сначала думал, что task manager просто смотрит каталог откуда запущен экзешник, и если
каталог Program Files (x86) то 32 бита, но свеже скопилированную программу лежащую совершенно в другом месте он свободно определил как 64 битную.

Причем программа была скомпилирована на дельфи 7.


Что-то совсем запутался, подскажите, знающие, заранее спасибо.
Moonquake

Последний раз редактировалось phphel; 25.08.2011 в 17:32.
phphel вне форума Ответить с цитированием
Старый 25.08.2011, 17:54   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
По умолчанию

Информация о разрядности exe содержится в секции Optional Header NT заголовка exe файла. А конкретно это:
Nt Header -> Optional Header -> Magic
$10b - x32
$20b - x64

приложение собранное для 64 битной систмы не может быть запущено в 32 разрядной системе.
Битность приложения зависит от компилятора(в d7-dXE компилятор x32), которым было собрано приложения(я так думаю).

Не думаю что твоя проблема зависит от того в какой системе собран exe.

Последний раз редактировалось Человек_Борща; 25.08.2011 в 17:59.
Человек_Борща вне форума Ответить с цитированием
Старый 25.08.2011, 17:59   #3
phphel
Форумчанин
 
Аватар для phphel
 
Регистрация: 12.07.2010
Сообщений: 249
По умолчанию

Ну вот, программа собрана на дельфи 7 на 64 битной семерке, и определяется как 64 битная.

А почему так, не могу понять..Ведь программа должна быть 32 битной, а она 64..мистика
Moonquake
phphel вне форума Ответить с цитированием
Старый 25.08.2011, 18:48   #4
phphel
Форумчанин
 
Аватар для phphel
 
Регистрация: 12.07.2010
Сообщений: 249
По умолчанию

Видимо таки 32 битная программа после компиляции, значит глюк диспетчера задач.

Тогда вопрос насчет определения.
Вот нашел нечто похожее - http://www.delphimaster.ru/cgi-bin/f...1266740974&n=5 это оно?
Moonquake
phphel вне форума Ответить с цитированием
Старый 25.08.2011, 19:02   #5
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

IsWow64Process() вернёт FALSE для 32-битного процесса, запущенного под 32-битной виндой, и для 64-битного процесса, запущенного под 64-битной виндой. Так что прийдётся ещё разрядность винды проверять заодно )
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 25.08.2011, 19:32   #6
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
По умолчанию

Я думаю, что битность компилируемого exe зависит на прямую от компилятора который используется, а не от системы в которой запущен компилятор.
Человек_Борща вне форума Ответить с цитированием
Старый 25.08.2011, 19:52   #7
Tronix
Форумчанин
 
Аватар для Tronix
 
Регистрация: 15.06.2010
Сообщений: 740
По умолчанию

Delphi компилирует только в 32-битный код. В 64 битный оно просто не умеет, хотя вроде бы как были какие-то анонсы, но воз и ныне там.
Чтобы понять рекурсию, сперва нужно понять рекурсию.
Tronix вне форума Ответить с цитированием
Старый 25.08.2011, 20:35   #8
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
По умолчанию

в delphi XE2 будет 64-битный компилятор
Человек_Борща вне форума Ответить с цитированием
Старый 25.08.2011, 23:08   #9
Tronix
Форумчанин
 
Аватар для Tronix
 
Регистрация: 15.06.2010
Сообщений: 740
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
в delphi XE2 будет 64-битный компилятор
Поживем - увидим. Я, например, первый из анонсов в блоге видел от 2010 года. А уже 11 подходит к концу.. Ну посмотрим, если сделают - то сделают. Если перенесут на 13 год - значит можно закапывать ящетаю.
Чтобы понять рекурсию, сперва нужно понять рекурсию.
Tronix вне форума Ответить с цитированием
Старый 26.08.2011, 02:19   #10
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
По умолчанию

Цитата:
Сообщение от Tronix Посмотреть сообщение
Поживем - увидим. Я, например, первый из анонсов в блоге видел от 2010 года. А уже 11 подходит к концу.. Ну посмотрим, если сделают - то сделают. Если перенесут на 13 год - значит можно закапывать ящетаю.
Полезное чтиво
Человек_Борща вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение значения числа при увеличении разрядности PARTOS Microsoft Office Excel 5 25.02.2011 20:56
Увеличение разрядности чисел с плавающей запятой Dmitry_B Общие вопросы C/C++ 5 02.08.2010 22:28
Определение разрядности Windows Alter Windows 7 24.06.2010 23:29
О разрядности компьютера Kurtan Помощь студентам 1 21.02.2009 10:15
Определение завершения сторонней программы Хамяг Общие вопросы Delphi 3 26.11.2008 18:12