我正在尝试阅读这一行,它是在遗留dll视觉工作室项目的c代码中,但我无法理解
_fmemcpy((LPSTR FAR *)Defdat,(LPSTR FAR *)&DLLdat,sizeof(DATSETTING));
我正在编译Windows 64位visual studio 2010 图书馆
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <time.h>
谢谢
答案 0 :(得分:1)
在16位窗口时代,指针可以是数据段内的16位指针,也可以存储16位段选择器和该段内的16位地址。后一种指针的术语是FAR,并且在不同模块之间传递的任何类型的指针,例如主程序和OS或DLL,都必须使用它们。除了最小的真实世界程序之外,其他所有程序都是如此,如果没有其他任何使用不同的段用于堆和堆栈。 LPSTR是匈牙利表示字符串的长指针,所以我认为这个程序员是多余的。
FAR指针的某些库函数曾经有单独的版本,而{16}版本的memcpy()
版本在16位Windows上的不同段之间复制数据。为了帮助移植代码,它成为32位Windows上的宏,扩展为memcpy()
,LPSTR
扩展为char *
。 FAR被忽略了。