求救以下Delphi代码,使用C#怎样实现。

yangys 2010-11-15 11:49:00
1、


function CheckSum(var CommData: TClientCommPacket): Boolean;
var
Buf: array of Byte;
i: Integer;
Sum: LongWord;
begin
SetLength(Buf, SizeOf(CommData));
CopyMemory(@Buf[0], @CommData, SizeOf(CommData));
Sum := 0;
for i := Low(Buf) to High(Buf) - SizeOf(LongWord) do
Sum := Sum + Buf[i];
Result := (CommData.Sum = Sum);

for i := Low(CommData.Data) to High(CommData.Data) do
CommData.Data[i] := CommData.Data[i] xor $FA;
/////////////////////////////////////////////////////
end;




TClientCommPacket 为结构体,重点是SetLength()函数;SizeOf()函数。
或者使用C#完全实现CheckSum()函数功能。也行。

2、


type
TBusinessFunc = function(const cIP: PChar; const Port: Word; const InData: Pchar;
var OutData: Pchar): Boolean of object; stdcall;

procedure acceptClient(const SVRHandle: Integer; ProDataFunc: TProDataFunc);
stdcall; External SVRDLL;



很急,能解答者重奖。

谢谢!
...全文
134 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangys 2010-11-17
  • 打赏
  • 举报
回复
谢谢各位,经过今晚的研究与测试,问题已解决。

知道有"SizeOf"函数,但被网上的误导了,以为求不了结构体的大小。

反而是CopyMemory()几经周折才找到处理的办法。

第2点相当于C#中的委托。


特别感谢。
mayonglong(人生就是一台戏)

真的有这样的转换工具,虽然转换出来的代码不能用,可以参考参考。




whrspsoft3723 2010-11-16
  • 打赏
  • 举报
回复

提示一下:
byte[] buf = new byte[n]

SetLength(Buf, SizeOf(CommData));
= buf = new byte[])

这段代码的作用是把 一个buffer中的byte值全都加起来,然后,看它是否等于那个结构体中的sum成员

你这个sum应该是这个成员的最后一个,所以,没有计算它的值。

sizeof[commdate 就是所有结构体的成员的长度和。
你这个结构体中的变量应该声明为定长。
不能为string,因为长度不定。但可以为string[4] 或char[] 之类的。

代码太简单了,你应该自己写才对。


whrspsoft3723 2010-11-16
  • 打赏
  • 举报
回复
for i := Low(CommData.Data) to High(CommData.Data) do
CommData.Data[i] := CommData.Data[i] xor $FA;


代码变成250
flyerwing 2010-11-16
  • 打赏
  • 举报
回复
照着那个写就好了.
cdglynn 2010-11-16
  • 打赏
  • 举报
回复
根据需求重新写下巴,一共也没多少
mayonglong 2010-11-16
  • 打赏
  • 举报
回复
使用个转换工具好了~

111,097

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧