Ваш вопрос не имеет смысла. Указатели, по определению, являются адресом памяти на что-то - размер должен зависеть от платформы. Как бы вы разыменовали 128-битный указатель на аппаратной платформе, поддерживающей 64-битную адресацию ?!
Вы можете создать 64 или 128-битные значения , но указатель непосредственно связан с схемой адресации памяти базового оборудования.
EDIT
С вашим дополнительным заявлением, я думаю, я вижу, что вы пытаетесь сделать. К сожалению, я сомневаюсь, что это возможно. Если функция ядра, которую вы хотите использовать, принимает 64-битный аргумент указателя, она, скорее всего, будет 64-битной функцией (если вы не разрабатываете какое-то необычное оборудование).
Даже если это технически возможно смешивать 64-битные инструкции в 32-битный исполняемый файл, ни один компилятор не позволит вам это сделать. 64-битный вызов API будет использовать 64-битный код, 64-битные регистры и 64-битный стек - было бы крайне неудобно, чтобы компилятор и операционная система могли управлять произвольным переключением с 32-разрядной среды на 64-разрядную Окружающая среда.
Вы должны посмотреть на поиск эквивалентного API для 32-разрядной среды. Возможно, вы могли бы разместить прототип функции ядра (имя + параметры), который хотите использовать, и кто-то может помочь вам найти лучшее решение.
Просто так что нет никакой путаницы, __ptr64
в MSDN это не зависит от платформы:
На 32-битной системе, указатель, объявленный с __ptr64 обрезается до 32-битного указателя .
Как именно вы собираетесь использовать указатель, который больше вашего адресного пространства? – user57368
Как объясняет @adelphus в своем [ответе ниже] (http://stackoverflow.com/a/9262508/180174), определение размера указателя в зависимости от платформы не имеет смысла. При этом существует тип '__int128' для 128-битных целых чисел в GCC 4.6 (но не старше). – Kimvais
Я сказал __ptr128 не __int128 –