300分请高手帮忙将几句C++代码翻译为delphi版。(300分)

M

mincom

Unregistered / Unconfirmed
GUEST, unregistred user!
BOOL KeepRunning = FALSE;
UINT WatchT(LPVOID pParam)
{
CDriverTestDlg * tempDlg = (CDriverTestDlg*) pParam;
HANDLE m_hDevice,IOWaiter;
ULONG nItems,nBytesRead;
m_hDevice = CreateFile("////.//maspi",GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,NULL);
KeepRunning = TRUE;
char RetRes[0x200]={0};
DWORD RetDataLen = 0;
int CountStep = 0;
for(;;)
{
if(DeviceIoControl(m_hDevice,0x80102180,NULL,0,RetRes,0x200,&RetDataLen,NULL))
{
if(!KeepRunning)
{
CancelIo(m_hDevice);
goto EXIT;
}
Sleep(50);
if(RetDataLen==1)
{
CString InputChar;
RetRes[RetDataLen] = 0;
encchar = RetRes[0];
DecCrypt(encchar);
CountStep++;
RetRes[0] = encchar;
RetRes[1] = 0;
InputChar.Format("%s :num=%d",RetRes,CountStep);
tempDlg->GetDlgItem(IDC_SHOWRES)->SetWindowText(InputChar);
}
}
}
EXIT:
return 0;
}
 
rp有問題
 
由于代码涉及的东西太多,又没有给出,比如deviceiocontrol,decrypt什么的, 无法实现,鉴定完毕.
 
不能断章取义啊,把来龙去脉都写清楚。
 
不了解变量的含义,无法改.
 
decrypt //可以不用翻译
只要把大概代码翻译出来既可
 
依葫芦画瓢既可。。。。。
 
for(;;)//一个无限循环,delphi可以用while代替
{
if(DeviceIoControl(m_hDevice,0x80102180,NULL,0,RetRes,0x200,&RetDataLen,NULL))//null可以用nil代替
{
if(!KeepRunning)//取反,如果keeprunning是true取反就是false
{
CancelIo(m_hDevice);//这是调用函数canceio
goto EXIT;//goto是跳转语句,exit是跳转的标识,这里是直接退出循环,exit在最下面
}
Sleep(50);//这个和delphi一样
if(RetDataLen==1)//比较变量是否等于1
{
CString InputChar;//string的变量
RetRes[RetDataLen] = 0;//这是一个一维数组
encchar = RetRes[0];
//DecCrypt(encchar);
这句不用翻译
CountStep++;//自增,delphi可以用inc函数
RetRes[0] = encchar;
RetRes[1] = 0;//都是赋值
//InputChar.Format("%s :num=%d",RetRes,CountStep);
//tempDlg->GetDlgItem(IDC_SHOWRES)->SetWindowText(InputChar);//这句是设置一个控件的显示内容,IDC_SHOWRES可以是一个edit或者label的标识
}
}
}
EXIT://goto的标识符
return 0;直接返回退出
}

总之,翻译只能是语法的翻译,由于delphi和c++诸多的区别,以及变量,指针等的不同,翻译过来即便编译正确,运行也可能出错,只要你看懂他的思路和实现方法,用delphi实现就简单了
 
lovezyp老兄 你这是等于没翻译撒。。。
我也知道 for(;;)//一个无限循环
关键是那些变量的定义 赋值` 不太懂` 谁能翻译份完整的?
难道真的没人懂C++吗?
 
这是个与驱动程序通讯的函数吧
把 if(){}换成if then
begin
end
把==换成=
把=换成:=
基本上就成了
 
还是不懂` 没人愿意全部翻译下吗? 本人没学过C
 
你这个问题也太体力了吧,dx哪有这种闲心啊,时间是很宝贵的唻!让我这个小虾米给你
翻译一下吧!参数传看了下sdk应该没有问题,为了我这么多汗水也要给分啊!
不过你现在上几年级啊?好像最次的大学也教c的![:D]
uses windows!bool,uint什么的有定义!
var
KeepRunning:BOOL;
KeepRunning:=false;
function WatchT(pParam:LPVOID ):UINT;//lpvoid=pointer
var
m_hDevice,IOWaiter:HANDLE;
nItems,nBytesRead:ULONG;
RetRes:array[0..$200] of char;
RetDataLen:DWORD;
CountStep:integer;
//InputChar:string;**** !not used
begin
m_hDevice:= CreateFile('////.//maspi',GENERIC_READ or GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL or FILE_FLAG_OVERLAPPED,0);
KeepRunning:=TRUE;
RetDataLen:= 0;
CountStep:= 0;
//CDriverTestDlg * tempDlg = (CDriverTestDlg*) pParam;
while Truedo
begin
if(DeviceIoControl(m_hDevice,$80102180,nil,0,RetRes,$200,@RetDataLen,nil))
begin
if(!KeepRunning)
begin
CancelIo(m_hDevice);
result:=0;
end;
Sleep(50);
if(RetDataLen==1)
begin
RetRes[RetDataLen]:= 0;
encchar := RetRes[0];
//DecCrypt(encchar);
这句不用翻译
inc(CountStep);
RetRes[0]:= encchar;
RetRes[1]:= 0;
//InputChar.Format("%s :num=%d",RetRes,CountStep);
//tempDlg->GetDlgItem(IDC_SHOWRES)->SetWindowText(InputChar);

end;
end;
end;
end;
 
//大概就像下面
var KeepRunning:BOOL=FALSE;
Function WatchT(pParam:pointer):UINT;
var m_hDevice,IOWaiter:THANDLE;
nItems,nBytesRead:LongWord;
RetRes:array[0..200] of char;
CountStep:Integer;
i:Integer;
RetDataLen:DWORD;
encchar:Char;
begin
ResUlt := 0;
m_hDevice := CreateFile('//./maspi',GENERIC_READ or GENERIC_WRITE,FILE_SHARE_READ,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL or FILE_FLAG_OVERLAPPED,0);
KeepRunning := TRUE;
ZeroMemory(@RetRes,sizeof(RetRes));
CountStep := 0;
i := 0;
while i < 1do
begin
if DeviceIoControl(m_hDevice,$80102180,nil,0,Pointer(@RetRes),sizeof(RetRes),RetDataLen,nil) then
begin
if Not(KeepRunning) then
begin
CancelIo(m_hDevice);
Exit;
end;
Sleep(50);
if RetDataLen = 1 then
begin
RetRes[RetDataLen] := #0;
encchar := RetRes[0];
DecCrypt(encchar);
Inc(CountStep);
RetRes[0] := encchar;
RetRes[1] := #0;
end;
end;
end;

end;
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3871079
 
谢谢了`
 
顶部