gpt4 book ai didi

delphi - 增加一个指针没有按照我计划的方式编译

转载 作者:行者123 更新时间:2023-12-02 18:04:34 25 4
gpt4 key购买 nike

我试图让我的代码尽可能简单,但我失败了。

这是我的代码:

class function TWS.WinsockSend(s:integer;buffer:pointer;size:word):boolean;
begin
dwError := Send(s,buffer,size,0);
// Debug
if(dwError = SOCKET_ERROR) then
begin
dwError := WSAGetLastError;
CloseSocket(s);
WSACleanup;
case (dwerror) of
//Case statement
else
LogToFile('Unhandled error: ' + IntToStr(dwError) + ' generated by WSASend');
end;
Exit(false);
end;

// if the size of the bytes sent isn't the expected one.
while(dwError <> size) do
dwError:= dwError + Send(s,Ptr(cardinal(buffer) + dwError),size-dwError,0);
Exit(true);
end;

错误位于

dwError:= dwError + Send(s,Ptr(cardinal(buffer) + dwError),size-dwError,0);

错误是“常量对象无法作为 var 参数传递”

我知道我需要一个变量,但是有没有一种方法可以在不添加一行的情况下完成它?

最佳答案

当编译器提示您传递参数的方式时,您需要知道的第一件事是该参数期望什么。因此,你应该去看一下Send的声明。如果查看声明并不能立即让您了解要修复的内容,那么您需要将该声明包含在您在问题中发布的代码中。

怀疑这实际上与递增指针无关。相反,编译器会提示第三个参数,您试图在其中传递表达式 size-dwError。我猜参数是这样声明的:

var buffersize: Word;

该函数计划为该参数提供一个值 - 这就是 var 的含义 - 因此您传递给该参数的东西必须是可以接收值(value)。您无法为两个变量相减的结果分配新值。

仔细看看编译器提示该行的地方。它不是将光标放置在第三个参数附近吗?这是问题所在的线索。

递减size,然后将其传递给函数。

Dec(size, dwError);
Inc(dwError, Send(s, Ptr(cardinal(buffer) + dwError), size, 0));

为什么你关心添加另一行?你达到当天的配额了吗?线路便宜;当一个无法表达自己时,不要害怕用两个来表达自己。对于变量也是如此。当您的代码不起作用时,节省一两个字节根本没有关系。

至少,您应该添加更多行以追踪问题的根源。当您有一行代码执行多个独立计算(例如获取新的指针值、获取新的大小以及调用函数)时,请将该行分成几个单独的部分。这样,如果其中一个出现问题并且编译器提示,您就会确切地知道应该归咎于哪一个。

关于delphi - 增加一个指针没有按照我计划的方式编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1156384/

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