谁能帮忙把这段C转成DELPHI参考一下,里面的指针搞不太懂。 ( 积分: 100 )

  • 主题发起人 主题发起人 给我现在
  • 开始时间 开始时间

给我现在

Unregistered / Unconfirmed
GUEST, unregistred user!
void CGameScence::OnDecryptMask(char *pszMsg)
{
char ttBuf[0x1000];
char szChar[3][0x40];
char szMask[0x400];

long nMask[3];

int nDestLen;

nDestLen = fnDecode6BitBuf(pszMsg, ttBuf, 0x1000);

long nIdentity = m_xMyHero.m_dwID;

ZeroMemory(szMask, 0x400);

ProduceMask(nIdentity, szMask);

MakeMask(szMask);

m_xSocket.OnDecryptMask(szMask);

memcpy(szChar[0], ttBuf, 0x14);
memcpy(szChar[1], ttBuf + 0x14, 0x14);
memcpy(szChar[2], ttBuf + 0x28, 0x14);

szChar[0][0x15] = '/0';
szChar[1][0x15] = '/0';
szChar[2][0x15] = '/0';

nMask[0] = GetGameMsgMask((BYTE *)szChar[0]);
nMask[1] = GetGameMsgMask((BYTE *)szChar[1]);
nMask[2] = GetGameMsgMask((BYTE *)szChar[2]);

m_wMask[0] = nMask[2] &amp
0xffff;
m_wMask[1] = nMask[0] &amp
0xffff;
m_wMask[2] = nMask[1] &amp
0xffff;
}
 
void CGameScence::OnDecryptMask(char *pszMsg)
{
char ttBuf[0x1000];
char szChar[3][0x40];
char szMask[0x400];

long nMask[3];

int nDestLen;

nDestLen = fnDecode6BitBuf(pszMsg, ttBuf, 0x1000);

long nIdentity = m_xMyHero.m_dwID;

ZeroMemory(szMask, 0x400);

ProduceMask(nIdentity, szMask);

MakeMask(szMask);

m_xSocket.OnDecryptMask(szMask);

memcpy(szChar[0], ttBuf, 0x14);
memcpy(szChar[1], ttBuf + 0x14, 0x14);
memcpy(szChar[2], ttBuf + 0x28, 0x14);

szChar[0][0x15] = '/0';
szChar[1][0x15] = '/0';
szChar[2][0x15] = '/0';

nMask[0] = GetGameMsgMask((BYTE *)szChar[0]);
nMask[1] = GetGameMsgMask((BYTE *)szChar[1]);
nMask[2] = GetGameMsgMask((BYTE *)szChar[2]);

m_wMask[0] = nMask[2] &amp
0xffff;
m_wMask[1] = nMask[0] &amp
0xffff;
m_wMask[2] = nMask[1] &amp
0xffff;
}
 
procedure CGameScence.OnDecryptMask(PChar pszMsg);
var
ttBuf :array[0..$1000-1] of char;
szChar:array[0..2] of array[0..$40-1] of char;
szMask:array[0..$400-1] of char;
nMask :array[0..2] of longInt;
nDestLen :Integer;
nIdentity:LongInt;
begin
nDestLen := fnDecode6BitBuf(pszMsg, ttBuf, $1000);
nIdentity:= m_xMyHero.m_dwID;

ZeroMemory(szMask, $400);
ProduceMask(nIdentity, szMask);
MakeMask(szMask);

m_xSocket.OnDecryptMask(szMask);

CopyMemory(szChar[0], ttBuf, $14);
CopyMemory(szChar[1], ttBuf[$14], $14);
CopyMemory(szChar[2], ttBuf[$28], $14);

szChar[0][$15] := #0;
szChar[1][$15] := #0;
szChar[2][$15] := #0;

nMask[0] := GetGameMsgMask(PChar(szChar[0]));
nMask[1] := GetGameMsgMask(PChar(szChar[1]));
nMask[2] := GetGameMsgMask(PChar(szChar[2]));

m_wMask[0] := nMask[2] and $ffff;
m_wMask[1] := nMask[0] and $ffff;
m_wMask[2] := nMask[1] and $ffff;
end;
 
晕了~~2楼的大哥memcpy(szChar[0], ttBuf, $14);这是DELPHI的函数吗?
你有没有试呀,你样回答问题太不负责任了吧。
 
呵呵,不好意思,你给的代码不全,
m_xMyHero.m_dwID这是什么东东,我也没法试,只好凑合着写一写了,我再改改
 
主要是从 CopyMemory(szChar[0], ttBuf, $14)
这句开始到后面的代码。
前面的我自己搞定。还有GetGameMsgMask();它的参数应该是个byte类型的指针。
 
CopyMemory(szChar[0], ttBuf[0], $14)


nMask[0] := GetGameMsgMask(PByte(szChar[0]));
nMask[1] := GetGameMsgMask(PByte(szChar[1]));
nMask[2] := GetGameMsgMask(PByte(szChar[2]));

其实Byte就相当于unsigned Char,使用中应该不会出错吧,而且好像用PChar的还多一些
 
[Error] Mirmain.pas(628): Invalid typecast
nMask[0] := GetGameMsgMask(PByte(szChar[0]));
到这一行出错了。
改为nMask[0] := GetGameMsgMask(PByte(@szChar[0]));
可以编译可是结果使终为零
memcpy(szChar[0], ttBuf, 0x14);//这一句我是这么移植的
Move(mytemp, szChar[0], $14);

怀疑参数传递的还是有问题。
函数的定义为
function GetGameMsgMask(bp:PBYTE):longint;
 
CopyMemory(@(szChar[0]), @(ttBuf[0]), $14)
这样应该没错了吧
或者
Move(ttBuf[0],szChar[0],$14)
此行其实就是CopyMemory的内部实现
 
function GetGameMsgMask(bp:PBYTE):longint;
--------------------------------------------
var
x :PByte;
begin
Integer(x) :=Integer(@(szChar[0]));
GetGameMsgMask(x);//此处传递的参数x,可以保证是szChar[0]的首地址了,这样楼主再试试
end;
 
接受答案了.
 
后退
顶部