CnPack Forum


 
Subject: "函数过程列表"专家的问题
wfymqj
灌水科科长
Rank: 3Rank: 3



UID 1023
Digest Posts 0
Credits 178
Posts 70
点点分 178
Reading Access 10
Registered 2005-9-6
Location 湖北
Status Offline
Post at 2005-9-9 12:24  Profile | Blog | P.M. 
"函数过程列表"专家的问题

"函数过程列表"专家的问题

  我用的是Delphi7,使用的是8月31日发布的版本。
  在写动态链接库时,发现[函数过程列表]专家不能显示出函数过程名。

  GExperts的[过程列表]专家就能够显示出来。
Top
zjy
管理员
Rank: 9Rank: 9Rank: 9



UID 2
Digest Posts 6
Credits 2385
Posts 1543
点点分 2385
Reading Access 102
Registered 2002-12-16
Location China
Status Offline
Post at 2005-9-9 14:45  Profile | Site | Blog | P.M. 
能否抓张图上来看看?

或者如果方便的话,能否将处理不正常的单元发到 master@cnpack.org




Zhou JingYu
CnPack Administrator
http://www.cnpack.org/
Top
wfymqj
灌水科科长
Rank: 3Rank: 3



UID 1023
Digest Posts 0
Credits 178
Posts 70
点点分 178
Reading Access 10
Registered 2005-9-6
Location 湖北
Status Offline
Post at 2005-9-10 12:28  Profile | Blog | P.M. 
不好意思,确实不太方便将单元文件发送。
  我将我的动态链接库简单说明一下:
  只有一个.dpr单元和一个.pas单元,
  我的主要内容都写在了.dpr文件内。
  发现[函数过程列表]专家不能显示出函数过程名也是在.dpr文件内。

  因不知道怎么将图在这里发送,我将抓的图发送到了邮件。
  
Top
wfymqj
灌水科科长
Rank: 3Rank: 3



UID 1023
Digest Posts 0
Credits 178
Posts 70
点点分 178
Reading Access 10
Registered 2005-9-6
Location 湖北
Status Offline
Post at 2005-9-10 14:33  Profile | Blog | P.M. 
我的一个简单有动态链接库示例

  您好,下面我做了一个简单动态库示例,保存为.dpr文件即可。
    下面一个简单的示例,“函数过程列表”专家不能显示出函数过程名。


----------------------------------------
library Project1;

uses
  SysUtils,
  Classes;


{$R *.res}
function InStr(const sShort: string; const sLong: string): Boolean;
var
  s1, s2: string;
begin
  s1 := LowerCase(sShort);
  s2 := LowerCase(sLong);
  Result := Pos(s1, s2) > 0;
end;

function IntToStrEx(Value: Integer; Len: Integer; FillChar: Char = '0'): string;
begin
  Result := IntToStr(Value);
  while Length(Result) < Len do
    Result := FillChar + Result;
end;


exports
  InStr,
  IntToStrEx;

begin
end.
Top
wfymqj
灌水科科长
Rank: 3Rank: 3



UID 1023
Digest Posts 0
Credits 178
Posts 70
点点分 178
Reading Access 10
Registered 2005-9-6
Location 湖北
Status Offline
Post at 2005-9-10 15:01  Profile | Blog | P.M. 
不好意思,以前没有完全测试,现在测试了一下,好像是CnWizards里的“函数过程列表”专家不支持在".dpr'后辍的单元中显示函数过程。


 请看如下一个SkipErrorProc.dpr单元。


program SkipErrorProc;
{$APPTYPE CONSOLE}
{$O-}

procedure LogError(ErrorCode: Integer; ErrorAddr: Pointer);
begin
  writeln('Code: ', ErrorCode, ' Addr: ', LongInt(ErrorAddr));

  // 清除堆栈,返回到Error()例程调用之前
  asm
    {$IFOPT W+}
      RET 6 * TYPE DWORD
    {$ELSE}
      RET 3 * TYPE DWORD
    {$ENDIF}
  end;
end;

var
  p : Pointer;

begin
  ErrorProc := @LogError;

  getmem(p, 1024*1024*1024);  // 试图分配过大的内存块,引发 reOutOfMemory 错误
  writeln('now, to here...');

readln;
end.
Top
wfymqj
灌水科科长
Rank: 3Rank: 3



UID 1023
Digest Posts 0
Credits 178
Posts 70
点点分 178
Reading Access 10
Registered 2005-9-6
Location 湖北
Status Offline
Post at 2005-9-10 15:46  Profile | Blog | P.M. 
  不好意思,贴代码上来有点占篇幅。由于确实是在测试时出了问题,才贴出来的。
  我在以下代码(TestHaveException.dpr)中使用“函数过程列表”专家时,Delphi7停止了响应。


program TestHaveException;

{$APPTYPE CONSOLE}

uses
  SysUtils;

function HaveException : boolean;
const
  {$WRITEABLECONST ON}
  IsFinally : LongInt =  0;

  procedure GetFinallyReturnAddr;
  begin
    try
      try
        asm xor eax, eax; idiv eax end;
      finally
        asm pop [IsFinally]; push [IsFinally] end;
      end;
    except
    end;
  end;

asm
  CMP   IsFinally, 0
  JNE   @@CHECK
  CALL  GetFinallyReturnAddr

@@CHECK:
  MOV   EAX, [ESP + 4]
  CMP   IsFinally, EAX
  JE    @@DONE
  MOV   EAX, 0
@@DONE:
end;

function HaveException_beta : boolean;
asm
end;

var
  i : integer;
begin
  try
    i := 3;
    i := 5 div i;
  finally
    Writeln(BoolToStr(HaveException, True));
  end;

  try
    i := 0;
    i := 5 div i;
  finally
    Writeln(BoolToStr(HaveException, True));
  end;

end.
Top
zjy
管理员
Rank: 9Rank: 9Rank: 9



UID 2
Digest Posts 6
Credits 2385
Posts 1543
点点分 2385
Reading Access 102
Registered 2002-12-16
Location China
Status Offline
Post at 2005-9-11 21:40  Profile | Site | Blog | P.M. 
非常感谢您细致的测试,我们会尽快分析并修正这个问题。请关注网站更新提示。




Zhou JingYu
CnPack Administrator
http://www.cnpack.org/
Top
zjy
管理员
Rank: 9Rank: 9Rank: 9



UID 2
Digest Posts 6
Credits 2385
Posts 1543
点点分 2385
Reading Access 102
Registered 2002-12-16
Location China
Status Offline
Post at 2005-9-12 12:01  Profile | Site | Blog | P.M. 
已建任务单

http://www.cnpack.org:8008/cnpack/tktview?tn=41
另外,论坛上帖图只要把图片作为附件上传就行了。




Zhou JingYu
CnPack Administrator
http://www.cnpack.org/
Top
Passion (LiuXiao)
管理员
Rank: 9Rank: 9Rank: 9


UID 359
Digest Posts 19
Credits 6812
Posts 3579
点点分 6812
Reading Access 102
Registered 2004-3-28
Status Offline
Post at 2005-10-7 11:42  Profile | Blog | P.M. 
此问题已经解决。是我们遗漏了对dpr文件的处理导致了Parser出错。非常感谢您的细致报告。
任务单见:
http://www.cnpack.org:8008/cnpack/tktview?tn=41

欢迎下载最新版本来测试。
Top
wfymqj
灌水科科长
Rank: 3Rank: 3



UID 1023
Digest Posts 0
Credits 178
Posts 70
点点分 178
Reading Access 10
Registered 2005-9-6
Location 湖北
Status Offline
Post at 2005-11-18 12:46  Profile | Blog | P.M. 
还是不可用

 我下了最新版本的,还是不能对dpr文件时行处理,是否是新版中未加入更改的?
Top
Passion (LiuXiao)
管理员
Rank: 9Rank: 9Rank: 9


UID 359
Digest Posts 19
Credits 6812
Posts 3579
点点分 6812
Reading Access 102
Registered 2004-3-28
Status Offline
Post at 2005-11-18 18:34  Profile | Blog | P.M. 
抱歉,您所描述的错误是我们最近在增加对interface支持时引入的,给您带来了不便。我们尽快改正。
Top
Passion (LiuXiao)
管理员
Rank: 9Rank: 9Rank: 9


UID 359
Digest Posts 19
Credits 6812
Posts 3579
点点分 6812
Reading Access 102
Registered 2004-3-28
Status Offline
Post at 2005-11-19 09:36  Profile | Blog | P.M. 
目前的最新构建版本中已经修复了此问题。
http://www.cnpack.org/download/u ... .9.166_Unstable.exe
对带来的不便,深表歉意。
Top
 




All times are GMT++8, the time now is 2024-9-20 10:59

    本论坛支付平台由支付宝提供
携手打造安全诚信的交易社区 Powered by Discuz! 5.0.0  © 2001-2006 Comsenz Inc.
Processed in 0.008027 second(s), 7 queries , Gzip enabled

Clear Cookies - Contact Us - CnPack Website - Archiver - WAP