Если вы используете p/invoke, тогда вам нужно быть уверенным, что у вас есть 64-битные версии доступных DLL. Это не проблема, если вы вызываете MS, поставляемые DLL, такие как kernel32, поскольку у них одно и то же имя на 32-разрядных и 64-разрядных платформах (как бы странно, я знаю), и поэтому ваше 64-битное приложение будет неявно ссылаться на правильные версия. Однако, если вы используете сторонние DLL, и ваше 64-битное приложение пытается связать себя с 32-битной DLL, вы получите исключение во время выполнения.
Это также означает, что если вы используете COM-объект в процессе, у вас возникнет проблема. 64-битное приложение может вызывать COM-объект вне процесса, который 32-разрядный (и наоборот), когда вы перемещаетесь по границе процесса, и COM позаботится о сортировке для вас.
Кроме этого, каркас заботится о большинстве вещей для вас. Вам никогда не придется беспокоиться о размерах указателей, а типы clr имеют явные размеры (int всегда 32 бита, всегда 64 бит). В чистом .NET мире очень мало беспокоиться. Это когда вы начинаете двигаться за пределами песочницы, чтобы вы были более осторожны.