Я использую встроенный движок 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 * и возвращает идентификатор в этом массиве. Но это будет означать дополнительное управление памятью, дополнительный поиск.
Я бы, конечно, пошел с «скрыть фактический тип», другими словами, использовать map
, vector
или какой-то похожий тип для хранения FILE *
и передать index
или что нужно для извлечения FILE *
для звонков, которые нуждаются в этом. Таким образом, не имеет значения, КАК вы открываете файл (вы можете позже захотеть использовать fstream
и C ++, например, который будет намного сложнее хранить в виде некоторой копии).
должно хватить long, но вы также можете использовать байтовый буфер
FILE *f;
char buffer[sizeof(f)];
memcpy(buffer, &f, sizeof(f));
Зачем тебе такой взлом?
Используйте целочисленное значение указателя, например, intptr_t из cstdint.