gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 19:15:25 24 4
gpt4 key购买 nike

我正在尝试阅读这一行,它位于旧版 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 位窗口时代,指针可以是数据段内的 16 位指针,也可以在该段内存储 16 位段选择器和 16 位地址。后一种指针的术语是 FAR,在不同模块(例如主程序和操作系统或 DLL)之间传递的任何类型的指针都必须使用它们。除了最小的现实世界程序之外,所有程序也是如此,如果没有别的办法,这些程序对堆和堆栈使用不同的段。 LPSTR 是匈牙利表示法,表示指向字符串的长指针,所以我认为这个程序员是多余的。

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

关于c++ - 需要帮助理解遗留的 C 代码 _fmemcpy((LPSTR FAR *)Defdat,(LPSTR FAR *)&DLLdat,sizeof(DATSETTING));,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32610151/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com