C++ 需要帮助了解遗留c代码_fmemcpy((LPSTR FAR*)Defdat,(LPSTR FAR*)和DLLdat,sizeof(DATSETTING));

C++ 需要帮助了解遗留c代码_fmemcpy((LPSTR FAR*)Defdat,(LPSTR FAR*)和DLLdat,sizeof(DATSETTING));,c++,c,legacy,C++,C,Legacy,我试图阅读这行代码,它是在遗留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> #includ

我试图阅读这行代码,它是在遗留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位地址。后一种指针的术语很遥远,任何在不同模块之间传递的指针,例如主程序和操作系统或DLL,都必须使用它们。除了最小的真实世界程序外,所有程序都是如此,如果没有其他程序的话,它们会对堆和堆栈使用不同的段。LPSTR是指向字符串的长指针的匈牙利符号,所以我认为这个程序员是多余的


过去,有些用于远指针的库函数有不同的版本,这就是在16位窗口的不同段之间复制数据的
memcpy()
版本。为了帮助移植代码,它变成了32位窗口上的一个宏,扩展为
memcpy()
,而
LPSTR
扩展为
char*
。FAR只是被忽略了。

?更多信息如何?库、编译器、体系结构……关于它,您还不了解什么?它是一个memcpy,指定的指针类型自许多版本的Windows出现以来就已经过时(至少在X86中是如此)。在指针类型过时后的头文件中,该指针类型的规范被禁止,您只有一个带有普通指针的普通memcpy。感谢所有我将阅读的关于memcpy和过时的内容以及JSF的解释,我希望我能管理它。这应该相当于
memcpy(Defdat,&DLLdat,sizeof(DATSETTING))