回 帖 发 新 帖 刷新版面

主题:汇编高手和DELPHI高手请进

asm读文件的代码
............
StreamInProc proc hFile:DWORD,pBuffer:DWORD, NumBytes:DWORD, pBytesRead:DWORD
    invoke ReadFile,hFile,pBuffer,NumBytes,pBytesRead,0
    xor eax,1
    ret
StreamInProc endp
...........................
invoke CreateFile,addr FileName,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0
                    .if eax!=INVALID_HANDLE_VALUE
                        mov hFile,eax
                        mov editstream.dwCookie,eax
                        mov editstream.pfnCallback,offset StreamInProc
                        invoke SendMessage,hwndRichEdit,EM_STREAMIN,SF_TEXT,addr editstream
                        invoke SendMessage,hwndRichEdit,EM_SETMODIFY,FALSE,0
                        invoke CloseHandle,hFile
                        mov FileOpened,TRUE
                    .else
                        invoke MessageBox,hWnd,addr OpenFileFail,addr AppName,MB_OK or MB_ICONERROR
                    .endif


我把它转成DELPHI代码时速度还是不快。这是为什么。用的是一样的EDITSTREAM。(首先当然不是DELPHI的问题),还是那里没有弄好。

下面我把DELPHI的部分代码写出来。请大家指点。
FUNCTION streaminproc(hfile:dword;pbuffer:pchar;numbytes:dword;var pbytesread:dword):longint;stdcall;
begin
 readfile(hfile,pbuffer^,numbytes,pbytesread,0);
result:=0;
end;
...............


editstream.dwcookie:=hfile;
editstream.pfncallback:=@streaminproc;
.........................
主要代友就是这样,可以读取文件,但速度还是不快。这是为什么。希望DELPHI和汇编高手指点指点我。
万分感谢。在线等

回复列表 (共2个回复)

沙发

对Delphi有一定了解(Pascal延续),仔细看了楼主的程序,没感觉有什么问题。

去Delphi论坛估计比这里收获大。

就用Delphi写过一个程序,纯属玩,关键段:

begin
  StartupInfo.cb:=SizeOf(TStartupInfo);
  StartupInfo.lpReserved:=nil;
  StartupInfo.lpDesktop:=nil;
  StartupInfo.lpTitle:=nil;
  StartupInfo.dwFlags:=STARTF_USESHOWWINDOW;
  StartupInfo.cbReserved2:=0;
  StartupInfo.lpReserved2:=nil;
  StartupInfo.wShowWindow:=SW_SHOW;
  z:=CreateProcess(nil,'C:\Program Files\Internet Explorer\IEXPLORE.EXE http://www.cctv.com',nil,nil,FALSE,0,nil,nil,StartupInfo,ProcessInformation);
  If z=False Then
    showmessage('抱歉,无法打开浏览器IE!');
end;

板凳

更新一下

我来回复

您尚未登录,请登录后再回复。点此登录或注册