static DWORD m_BASEADD1 = 0x009B727C; 
static DWORD runcall = 0x00707C70;  
typedef struct _speak 
{  
    DWORD dwType; 
    DWORD unknow1; 
    DWORD unknow2; 
    WORD  dwLen; 
    char  SayWord[50]; 
} void MainDlg::OnBnClickedButton3()  

//SPEAK();
CString sayword; 
int charsize,charsize1; 
m_EDIT2.GetWindowText(sayword); 
charsize = wcslen(sayword); 
charsize1 = charsize*2+14; 
Speak* ppspeak = new Speak;   
ppspeak->dwType = 1; 
ppspeak->unknow1 = 0; 
ppspeak->unknow2 = 0;  
ppspeak->dwLen = wcslen(sayword);
memcpy(ppspeak->SayWord,sayword,wcslen(sayword)*2);
__asm 
{
  pushad;  
  nop
   nop  
   nop 
   nop 
   nop  
   nop 
   nop 
   nop  
   nop 
   nop 
   mov edi,m_BASEADD1; 
   mov edi,dword ptr [edi];  
   push 0; 
   push 2 
   push ppspeak;
   push 1 
   mov eax,charsize1;
   push 0xB;
   call runcall
   popad; 
}
delete ppspeak;
} 不胜感激啊!!!!!!!!!!!!!

解决方案 »

  1.   

    有汇编啊!这个不难!struct结构体而已Delphi里面也有!好了楼主自己可以翻译过来了呵呵!我是新手,开玩笑而已呵呵!
      

  2.   

    {$j+}
    const  m_BASEADD1:DWORD = $009B727C; 
    const  runcall:DWORD = $00707C70;  
    {$j-}
    type
      _speak  = record
        dwType: DWORD ; 
        unknow1: DWORD ; 
        unknow2: DWORD ; 
        dwLen: WORD  ; 
        SayWord: array[0..50-1] of AnsiChar; 
      end;
      Speak = _speak;
      LPSpeak = ^Speak ;procedure MainDlg.Button3Click(Sender: TObject); 
    var
      sayword: WideString; 
      charsize,charsize1: Integer;
      ppspeak:LPSpeak ;
    begin
      sayword := m_EDIT2.Text;//TEdit
      charsize := Length(sayword); 
      charsize1 := charsize*2+14; 
      new(ppspeak);   
      ppspeak^.dwType := 1; 
      ppspeak^.unknow1 := 0; 
      ppspeak^.unknow2 := 0;  
      ppspeak^.dwLen := Length(sayword);
      move(sayword[1],ppspeak^.SayWord[0],Length(sayword)*2);
      asm 
      pushad  
      nop
       nop  
       nop 
       nop 
       nop  
       nop 
       nop 
       nop  
       nop 
       nop 
       mov edi,m_BASEADD1
       mov edi,dword ptr [edi]  
       push 0
       push 2 
       push ppspeak;
       push 1 
       mov eax,charsize1;
       push $B;
       call runcall
       popad; 
    end
    dispose( ppspeak);
    end;
      

  3.   

    谢谢楼上这位大大! 最后一句貌似有点问题呀 编译不了dispose( ppspeak);
      

  4.   

    上面一行的end少了个分号