我有很老的'c'代码,它使用read来读取二进制文件。这是一个示例:
uint MyReadFunc(int _FileHandle, char *DstBuf, uint BufLen)
{
return (read( _FileHandle, DstBuf, BufLen));
}
对于64位OS - char *将为64位,但BufLen仅为32位,返回值仅为32位。
它不是将其更改为.NET的选项 - 我有.NET版本,但我还需要转换这个旧库。
有人可以告诉我在64位操作系统上使用文件i / o需要用什么(使用'C'代码)
答案 0 :(得分:3)
使用size_t
,而不是uint
。
答案 1 :(得分:0)
看起来你正在混淆两件事:指针的大小和它所指向的记忆范围。
答案 2 :(得分:0)
我不确定char *是64位 - 指针本身是64位,是的,但实际值仍然是一个字符数组,除非我遗漏了什么? (我不是一个出色的C程序员。)
read()的长度参数是size_t,而不是int,在64位系统上应该是64位而不是32.而且返回值是ssize_t,而不是int,它也是64位所以如果只是将函数定义更改为返回ssize_t,则应该覆盖,并使用size_t而不是整数。