Как преобразовать FILE * в числовой дескриптор в 64-битной системе?

Я использую встроенный движок JavaScript, и я передавал результат fopen() код JS как номер.

int numeric_handle = (int)fopen(*P1, "rb");
return Number::New(numeric_handle); // Return to JavaScript

Но теперь мне нужно перекомпилировать в 64-битной системе, и я получаю

fatal error: cast from pointer to smaller type 'int' loses information

Теперь я немного застрял, как мне сохранить дизайн моей системы, но изменить как можно меньше кода? Я думал о том, чтобы иметь хэш-карту, массив, который содержит FILE * и возвращает идентификатор в этом массиве. Но это будет означать дополнительное управление памятью, дополнительный поиск.

1

Решение

Я бы, конечно, пошел с «скрыть фактический тип», другими словами, использовать map, vector или какой-то похожий тип для хранения FILE *и передать index или что нужно для извлечения FILE * для звонков, которые нуждаются в этом. Таким образом, не имеет значения, КАК вы открываете файл (вы можете позже захотеть использовать fstream и C ++, например, который будет намного сложнее хранить в виде некоторой копии).

0

Другие решения

должно хватить long, но вы также можете использовать байтовый буфер

FILE *f;
char buffer[sizeof(f)];
memcpy(buffer, &f, sizeof(f));

Зачем тебе такой взлом?

2

Используйте целочисленное значение указателя, например, intptr_t из cstdint.

1
По вопросам рекламы [email protected]