请问哪位大神能帮我看看我这句转得对不对 老是会出错。
vc:DWORD WINAPI         debugProc(LPVOID lpParameter )
{
        if(debuger1.caozuo==1)
        {
                        
                RefreshThreadList(GetCurrentProcessId());
                for(int i=0;i<100;i++)
                {
                        if(lst==0)
                        {
                        break;
                        }
                        if(lst!=GetCurrentThreadId())
                        {
                        HANDLE thd=OpenThread(THREAD_ALL_ACCESS,true,lst);
                        SuspendThread(thd);
                        CONTEXT con;
                        con.ContextFlags=CONTEXT_CONTROL|CONTEXT_DEBUG_REGISTERS;
                        GetThreadContext(thd,&con);
                        if(debuger1.dr==0)
                        {
                        con.Dr0=debuger1.addr; 
                        con.Dr7=con.Dr7|0x3;
                        }
                        if(debuger1.dr==1)
                        {
                                con.Dr1=debuger1.addr; 
                                con.Dr7=con.Dr7|0xc;
                        }
                        if(debuger1.dr==2)
                        {
                                con.Dr2=debuger1.addr; 
                                con.Dr7=con.Dr7|0x30;
                        }
                        if(debuger1.dr==3)
                        {
                                con.Dr3=debuger1.addr; 
                                con.Dr7=con.Dr7|0xc0;
                        }
                        
                        con.ContextFlags= CONTEXT_CONTROL|CONTEXT_DEBUG_REGISTERS;
                        SetThreadContext(thd,&con);
                        ResumeThread(thd);
                        }
                }
        }else
        {
     
                
                RefreshThreadList(GetCurrentProcessId());
                for(int i=0;i<100;i++)
                {
                        if(lst==0)
                        {
                                break;
                        }
                        if(lst!=GetCurrentThreadId())
                        {
                                HANDLE thd=OpenThread(THREAD_ALL_ACCESS,true,lst);
                                SuspendThread(thd);
                                CONTEXT con;
                                con.ContextFlags=CONTEXT_CONTROL|CONTEXT_DEBUG_REGISTERS;
                                GetThreadContext(thd,&con);
                                if(debuger1.dr==0)
                                {
                                        con.Dr0=debuger1.addr; 
                                        con.Dr7=con.Dr7&~0x3;
                                }
                                if(debuger1.dr==1)
                                {
                                        con.Dr1=debuger1.addr; 
                                        con.Dr7=con.Dr7&~0xc;
                                }
                                if(debuger1.dr==2)
                                {
                                        con.Dr2=debuger1.addr; 
                                        con.Dr7=con.Dr7&~0x30;
                                }
                                if(debuger1.dr==3)
                                {
                                        con.Dr3=debuger1.addr; 
                                        con.Dr7=con.Dr7&~0xc0;
                                }
                                
                                con.ContextFlags= CONTEXT_CONTROL|CONTEXT_DEBUG_REGISTERS;
                                SetThreadContext(thd,&con);
                                ResumeThread(thd);
                        }
                }
        }               debuger1.addr=0;
        debuger1.caozuo=0;
        debuger1.dr=0;         return true;
}
delphi:function debugProc(lpParameter:Pointer):bool;stdcall;
var
thd:thandle;
con:TContext;
i:integer;
begin
    if debuger1.caozuo=1 then begin
       RefreshThreadList(GetCurrentProcessId());
     for i:=0 to 99 do
       if lst=0 then begin
       exit;
       end;
    if lst<>GetCurrentThreadId() then begin
       thd:=OpenThread(STANDARD_RIGHTS_REQUIRED or SYNCHRONIZE or $3ff,true,lst);
       SuspendThread(thd);
       con.ContextFlags:=CONTEXT_CONTROL or CONTEXT_DEBUG_REGISTERS;
       GetThreadContext(thd,con);       if debuger1.dr=0 then begin
       con.Dr0:=debuger1.addr;
       con.Dr7:=con.Dr7 or $3;
       end;
       if debuger1.dr=1 then begin
       con.Dr0:=debuger1.addr;
       con.Dr7:=con.Dr7 or $c;
       end;
       if debuger1.dr=2 then begin
       con.Dr0:=debuger1.addr;
       con.Dr7:=con.Dr7 or $30;
       end;
       if debuger1.dr=3 then begin
       con.Dr0:=debuger1.addr;
       con.Dr7:=con.Dr7 or $c0;
       end;
       con.ContextFlags:= CONTEXT_CONTROL or CONTEXT_DEBUG_REGISTERS;
       SetThreadContext(thd,con);
                         ResumeThread(thd);     end;   end
    else
    begin
    RefreshThreadList(GetCurrentProcessId());
    for i:=0 to 99 do begin
       if lst=0 then begin
       exit;
       end;
    if lst<>GetCurrentThreadId() then begin
       thd:=OpenThread(STANDARD_RIGHTS_REQUIRED or SYNCHRONIZE,true,lst);
       SuspendThread(thd);
       con.ContextFlags:=CONTEXT_CONTROL or CONTEXT_DEBUG_REGISTERS;
       GetThreadContext(thd,con);       if debuger1.dr=0 then begin
       con.Dr0:=debuger1.addr;
       con.Dr7 := con.Dr7 and (not $3);
       end;
       if debuger1.dr=1 then begin
       con.Dr0:=debuger1.addr;
       con.Dr7 := con.Dr7 and (not $c);
       end;
       if debuger1.dr=2 then begin
       con.Dr0:=debuger1.addr;
       con.Dr7 := con.Dr7 and (not $30);
       end;
       if debuger1.dr=3 then begin
       con.Dr0:=debuger1.addr;
       con.Dr7 := con.Dr7 and (not $c0);
       end;
       con.ContextFlags:= CONTEXT_CONTROL or CONTEXT_DEBUG_REGISTERS;
       SetThreadContext(thd,con);
                         ResumeThread(thd);    end;
    end;
    end;
  debuger1.addr:=0;
        debuger1.caozuo:=0;
        debuger1.dr:=0;
  result:=true;
end;