Проблемы с файловым вводом / выводом при переносе старых библиотек 'C' с 32-разрядных на 64-разрядные - PullRequest
1 голос
/ 25 февраля 2010

У меня действительно старый код 'c', который использует чтение для чтения двоичного файла. Вот образец:

uint MyReadFunc(int _FileHandle, char *DstBuf, uint BufLen)
{  
    return (read( _FileHandle, DstBuf, BufLen));
}

Для 64-битной ОС - char * будет 64-битным, но BufLen - только 32-битным, а возвращаемое значение - только 32-битным.

Нельзя изменить это на .NET - у меня есть версии .NET, но мне нужно конвертировать и эту старую библиотеку.

Может кто-нибудь сказать, что мне нужно использовать для ввода / вывода файлов в 64-битной ОС (с использованием кода 'C')

Ответы [ 3 ]

3 голосов
/ 25 февраля 2010

Используйте size_t, а не uint.

0 голосов
/ 25 февраля 2010

Я не уверен, что char * 64-битный - сам указатель будет 64-битным, да, но фактическое значение по-прежнему является массивом символов, если я что-то упустил? (Я не блестящий программист на Си.)

Аргумент length для read () равен size_t, а не int, который в 64-битной системе должен быть 64-битным, а не 32. Также возвращаемое значение - ssize_t, а не int, который также будет 64-битным, поэтому вы должны быть защищены, если вы просто измените определение своей функции, чтобы она возвращала ssize_t, и взяли size_t вместо int.

0 голосов
/ 25 февраля 2010

Похоже, вы объединяете две вещи: размер указателя и объем памяти, на который он указывает.

...