需要帮助理解遗留的 c 代码 _fmemcpy((LPSTR FAR *)Defdat,(LPSTR FAR *)&DLLdat,sizeof(DATSETTING));

need help understandinga legacy c code _fmemcpy((LPSTR FAR *)Defdat,(LPSTR FAR *)&DLLdat,sizeof(DATSETTING));

我正在尝试阅读遗留 dll visual studio 项目的 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>

谢谢

回到 16 位 windows 时代,指针可以是数据段内的 16 位指针,也可以在其中存储 16 位段选择器和 16 位地址那个段。后一种指针的术语是 FAR,在不同模块之间传递的任何类型的指针,例如主程序和 OS 或 DLL,都必须使用它们。除了最小的真实世界的程序之外,所有的程序都是如此,如果没有别的,堆和栈使用不同的段。 LPSTR 是指向字符串的长指针的匈牙利表示法,所以我认为这个程序员是多余的。

FAR 指针的某些库函数曾经有单独的版本,那就是 memcpy() 在 16 位 Windows 上的不同段之间复制数据的版本。为了帮助移植代码,它变成了 32 位 Windows 上的宏,扩展为 memcpy()LPSTR 扩展为 char *。 FAR 被忽略了。