Создание 64-битных приложений

Если у меня есть 32-битное приложение, написанное на C #, что мне нужно сделать, чтобы преобразовать его в 64-битное? Я предполагаю, что это сложнее, чем просто изменить целевую машину на 64-разрядную в Visual Studio и перекомпилировать.


person Icemanind    schedule 19.10.2009    source источник
comment
Проблема, с которой я сталкиваюсь, заключается в том, что моя программа использует базу данных MS Access и, похоже, не работает в 64-битном режиме. Насколько я понимаю из поиска в Google и т. Д., У Microsoft нет 64-битной версии драйверов баз данных JET. Есть ли что-нибудь вокруг этого? Возможно, сделать какую-то 64-битную оболочку, которая вызывает 32-битные драйверы или что-то в этом роде?   -  person Icemanind    schedule 19.10.2009
comment
Зачем вам нужно запускать 64-битный процесс, если вы возитесь с базой данных Access? Вам не нужна GeForce для запуска Commander Keen, ffs.   -  person    schedule 19.10.2009
comment
Прекратите повторять один и тот же комментарий ко всем полученным вами ответам. Вы прокомментируете один раз, мы все это увидим, обещаю.   -  person dreadwail    schedule 19.10.2009


Ответы (7)


Если вы не используете взаимодействие (COM, WinAPI) и не делаете предположений о размере указателей, это простой переход на другую платформу. Даже при использовании последнего у вас, вероятно, все в порядке, если вы не используете библиотеки, которые где-то делают вышеупомянутые предположения.

Чтобы процитировать MSDN относительно System.IntPtr:

Тип IntPtr разработан как целое число, размер которого зависит от платформы. То есть ожидается, что экземпляр этого типа будет 32-битным на 32-битном оборудовании и операционных системах и 64-битным на 64-битном оборудовании и операционных системах.

- Но другие типы .NET предназначены для фиксированного размера, независимо от платформы.

person Konrad Rudolph    schedule 19.10.2009
comment
Проблема, с которой я сталкиваюсь, заключается в том, что моя программа использует базу данных MS Access и, похоже, не работает в 64-битном режиме. Насколько я понимаю из поиска в Google и т. Д., У Microsoft нет 64-битной версии драйверов баз данных JET. Есть ли что-нибудь вокруг этого? Возможно, сделать какую-то 64-битную оболочку, которая вызывает 32-битные драйверы или что-то в этом роде? - person Icemanind; 19.10.2009

Вам действительно нужно, чтобы он работал в 64-битном режиме или вы просто хотите, чтобы он работал на 64-битной машине?

В последнем случае вы можете настроить проект C # на Win32, а не на AnyCPU. Это означает, что когда вы запускаете его на 64-битной машине, он будет работать через WOW (32-битную «эмуляцию»), это имеет то преимущество, что (неуправляемый) драйвер JET также будет работать 32-битным. Это должно решить вашу проблему.

person Ade Miller    schedule 19.10.2009

Это зависит от того, что делает ваше приложение. Если он использует неуправляемые API, P / Invoke и арифметику указателей, вполне возможно, что он не будет работать на 64-битной платформе без некоторых модификаций. В противном случае все будет в порядке, вам даже не нужно указывать платформу, просто выберите Any CPU, и он должен работать.

person Darin Dimitrov    schedule 19.10.2009
comment
Проблема, с которой я сталкиваюсь, заключается в том, что моя программа использует базу данных MS Access и, похоже, не работает в 64-битном режиме. Насколько я понимаю из поиска в Google и т. Д., У Microsoft нет 64-битной версии драйверов баз данных JET. Есть ли что-нибудь вокруг этого? Возможно, сделать какую-то 64-битную оболочку, которая вызывает 32-битные драйверы или что-то в этом роде? - person Icemanind; 19.10.2009

Один из моих коллег только что столкнулся с проблемой в одном из своих личных проектов. Оказывается, Microsoft не писала драйверы Jet для 64-битных версий и не собирается этого делать.

Что странно, поскольку у Office 2010 будет 64-разрядная версия.

Мой вам совет - установите для свойств проекта значение x86 (не Any CPU) и оставьте его там. 64-битная Windows может без проблем запускать 32-битные приложения, а вот 16-битные приложения запускать не могут.

person Powerlord    schedule 19.10.2009

Как насчет того, чтобы сделать то, что предлагает этот вопрос? Замечу, я никогда раньше этого не делал.

person peacedog    schedule 19.10.2009

http://msdn.microsoft.com/en-us/library/ms241064.aspx

Остальные комментарии - хорошие моменты. Вам также необходимо понимать изменения, связанные с виртуализацией реестра и узел Wow64.

person Adam Driscoll    schedule 19.10.2009
comment
Обратите внимание, что ключи, затронутые в Windows Vista / Server 2008, отличаются от ключей в Windows 7 / Server 2008 R2. См. msdn.microsoft.com/en-us/ библиотека / - person Powerlord; 19.10.2009

Я предполагаю, что это сложнее, чем просто изменить целевую машину на 64-разрядную в Visual Studio и перекомпилировать.

Может быть нет. Если у вас нет никаких зависимостей от внешних библиотек, это все, что вам нужно сделать. Что делает его более сложным, так это развертывание. Вы не хотите отправлять 64-битный двоичный файл 32-битному пользователю. Итак, даже лучше, выберите вариант «Любой процессор», и ваше приложение будет автоматически JIT-компиляции как 64-разрядная на 64-разрядной машине (с установленной 64-разрядной версией фреймворка) и 32-разрядная (x86) везде. еще.

Но вы должны быть очень уверены, что у вас нет 32-битных зависимостей.

person Joel Coehoorn    schedule 19.10.2009