C到Delphi:未填充结构

C到Delphi:未填充结构,delphi,record,delphi-10-seattle,Delphi,Record,Delphi 10 Seattle,我正在尝试将一段代码从C翻译成Delphi,目标是填充一个结构,直到定义了允许的最大限制。我试图使Delphi版本更接近C代码(即使不是专业程序员) 但我注意到,在我的Delphi代码中,似乎结构只填充了0个值(结果是FillMemory()),而没有填充正确的值 我怎样才能解决它?下面我只显示相关代码 C:() struct客户端 { 插座连接[2]; 德沃德·乌希德; HWND-HWND; 字节*像素; DWORD pixelsWidth,pixelsHeight; DWORD屏幕宽度、屏幕

我正在尝试将一段代码从C翻译成Delphi,目标是填充一个结构,直到定义了允许的最大限制。我试图使Delphi版本更接近C代码(即使不是专业程序员)

但我注意到,在我的Delphi代码中,似乎结构只填充了0个值(结果是
FillMemory()
),而没有填充正确的值

我怎样才能解决它?下面我只显示相关代码

C:()

struct客户端
{
插座连接[2];
德沃德·乌希德;
HWND-HWND;
字节*像素;
DWORD pixelsWidth,pixelsHeight;
DWORD屏幕宽度、屏幕高度;
HDC-hDcBmp;
处理地雷;
全屏;
矩形窗选;
};
静态客户端g_客户端[256];
静态客户端*GetClient(void*数据,BOOL-uhid)
{
对于(int i=0;i<256;++i)
{
如果(超高密度)
{
if(g_客户端[i].uhid==(DWORD)数据)
return&g_客户[i];
}
其他的
{
如果(g_客户机[i].hWnd==(hWnd)数据)
return&g_客户[i];
}
}
返回NULL;
}
BOOL-recordClient()
{
Client*Client=NULL;
BOOL-found=FALSE;
德沃德·乌希德;
uhid=27650;//一些值,仅作为示例
memset(g_客户端,0,sizeof(g_客户端));
client=GetClient((void*)uhid,TRUE);
如果(客户)
返回FALSE;
对于(int i=0;i<256;++i)
{
if(!g_clients[i].hWnd)
{
发现=真;
client=&g_clients[i];
}
}
如果(!找到)
{
wprintf(文本(“用户%S最多%d个用户”),“185.242.4.203”,256);
返回FALSE;
}
返回TRUE;
}
Delphi:

类型
PClient=^Client;
客户端=记录
连接:TSocket的数组[0..1];
乌希德,
像素宽度,
像素高度,
屏幕宽度,
屏幕高度:红衣主教;
_hWnd:hWnd;
像素:PByte;
hDcBmp:HDC;
矿井:坦德尔;
全屏:布尔;
windowRect:TRect;
结束;
变量
客户端:客户端的数组[0..255];
//...
函数GetClient(数据:指针;uhId:布尔值):PClient;
变量
I:整数;
开始
结果:=无;
对于I:=0到255 do
开始
如果是的话
开始
如果客户机[I].uhId=Cardinal(数据),则
开始
结果:=@Clients[I];
打破
结束;
结束
其他的
开始
如果客户端[I]。\u hWnd=hWnd(数据),则
开始
结果:=@Clients[I];
打破
结束;
结束;
结束;
结束;
函数recordClient:Boolean;
变量
_客户:PClient;
_乌希德:红衣主教;
发现:布尔型;
I:整数;
开始
结果:=真;
FillMemory(@Clients,SizeOf(Clients),0);
_uhId:=27650;//有些价值,这里仅作为示例
_client:=GetClient(@_uhId,True);
如果客户为零,则
开始
结果:=假;
出口
结束;
发现:=假;
对于I:=0到255 do
开始
如果客户端[I]。\u hWnd=0,则
开始
发现:=真;
_客户:=@Clients[I];
结束;
结束;
如果没有找到的话
开始
Writeln(格式('客户端%s被拒绝,允许的最大客户端数为%d个。'+#13,
['185.242.4.203', 256])); // 仅示例值
结果:=假;
出口
结束;
结束;

无论是在C端还是在Delphi端,都没有显示实际试图用数据填充数组的代码。查看原始C代码,它使用
ClientThread()
函数中的数据填充找到的数组元素。您没有翻译这些C代码片段,这解释了为什么Delphi代码中的数组中没有数据:

静态DWORD WINAPI客户端线程(PVOID参数)
{
Client*Client=NULL;
套接字s=(套接字)参数;
...
如果(连接==连接::桌面)
{
client=GetClient((void*)uhid,TRUE);
如果(!客户端)
{
插座;
返回0;
}
客户端->连接[Connection::desktop]=s;
...
对于(;;)
{
...
如果(recv(s,(char*)和client->screenWidth,sizeof(client->screenWidth),0)屏幕高度,sizeof(client->screenHeight),0)像素&&client->pixelsWidth==…&&client->pixelsHeight==…)
{
对于(…)
{
...
客户端->像素[i]=新像素[i];
客户端->像素[i+1]=新像素[i+1];
客户端->像素[i+2]=新像素[i+2];
}
...
}
其他的
{
免费(客户端->像素);
客户端->像素=新像素;
}
...
删除DC(客户->hDcBmp);
客户端->像素宽度=宽度;
客户端->像素高度=高度;
客户->hDcBmp=hDcBmp;
...
}
...
}
出口:
...
返回0;
}
else if(连接==连接::输入)
{
...
client=GetClient((void*)uhid,TRUE);
如果(客户)
{
插座;
...
返回0;
}
...
BOOL-found=FALSE;
对于(int i=0;ihWnd=CW\u Create(uhid、gc\u minWindowWidth、gc\u minWindowHeight);
客户->uhid=uhid;
客户端->连接[Connection::input]=s;
client->minEvent=CreateEventA(NULL、TRUE、FALSE、NULL);
...
免费(客户端->像素);
删除DC(客户->hDcBmp);
closesocket(客户端->连接[Connection::input]);
closesocket(客户端->连接[Connection::desktop]);
CloseHandle(cli