<font color=red>好不容易上来</font>,问一个语法的问题(150分)

  • 主题发起人 主题发起人 千中元
  • 开始时间 开始时间

千中元

Unregistered / Unconfirmed
GUEST, unregistred user!
1)type
TPluginDescribe = procedure(var Desc: string)
stdcall;----TPluginDescribe
是什么数据类型?
什么时候使用?
var
Description: string;
DescribeProc: TPluginDescribe;
代码:
......
DescribeProc := GetProcAddress(LibHandle,cPLUGIN_DESCRIBE)
........
DescribeProc(Description)
把上面的代码解释解释吧,看不懂:(
2)FindFirst(path + cPLUGIN_MASK, 0, sr)
看delphi帮助中FindFirst的第二个参数好像不能为0,代码错了?
第一个问题100分,第二个50分
 
过程类型啰。
用于动态指定使用的过程。
上面的程序从dll中动态获得过程地址,从而对过程类型变量赋值。
动态指定后,过程类型变量就可以用作普通过程使用。
或者,你去看一下Delphi自带demo:elphi5/demos/Threads中的用法吧。

查一下Delphi的帮助,里面有对FindFirst的第二个参数的详细解释。
 
(1)stdcall指定的是回调函数
是一种当前进程访问另一进程的函数的函数类型
如需例子,可Email to you
(2)以下是帮助对第二个参数的描述:
Constant Value Description
faReadOnly $00000001 Read-only files
faHidden $00000002 Hidden files
faSysFile $00000004 System files
faVolumeID $00000008 Volume ID files
faDirectory $00000010 Directory files
faArchive $00000020 Archive files
faAnyFile $0000003F Any file
可设成 faAnyFile+faHidden+faSysFile+faReadOnly
如要直接赋值,可如上面所示赋值
或先把0赋予一变量
var
I,FindResult :integer;
FSearchRec: TSearchRec;
begin
i:=0;
FindResult := FindFirst(APath+FFileName,i,FSearchRec);
end
 
一个例子:
Tisc_add_user = function (status_vector : PISC_STATUS;
user_sec_data : PUserSecData): ISC_STATUS;
stdcall;
var
isc_add_user:Tisc_add_user;

procedure TForm1.FormCreate(Sender: TObject);
function GetProcAddr(ProcName: PChar): Pointer;
begin
Result := GetProcAddress(IBLibrary, ProcName);
if not Assigned(Result) then
RaiseLastWin32Error;
end;
begin
IBLibrary := LoadLibrary(PChar(IBASE_DLL));
isc_add_user := GetProcAddr('isc_add_user')
{do not localize}
end;

这样isc_add_usr这个API函数就可以在程序中用了,如:
isc_add_user(isc_status, userDataPtr);
 
第一个问题已经清楚了。谢谢。
第二个,如果第二个参数为0的话是什么类型的文件?value没有0
 
别用0呗,至少用一个faAnyFile啊。
 
老千很少这么大方的说。可惜来迟了。:)
 
真不知道第二个参数设置为0会什么结果。
让我试试。
 
刚才进行实验,结果表明,如果第二个参数使用0,将能找到
那些非系统非隐藏非目录的文件。
 
我发现直接用ID号码的话上大富翁很快。
to wu,不要乱说话好么,你看看我帖子近期的分数,哪个不比这个多。问题是你怎么
次次都迟到。不是好学生。
to JohnsonGuo,那样就对了,看代码的意思是要找一个Dll文件。
奇怪的是帮助里居然没有说
 
奇怪,我记得千中元挺厉害的啊,怎么会问第一个问题的?第一个问题我都能理解,不过
也是在我看过一本,Mmm,书名是<<DELPHI5高级编程--IDE与面向对象编程>>,从这本书上
我知道了不少DELPHI的基本概念:)
PS 第一个问题,在这本书中是在如何动态调用DLL中的函数(过程)一节中写到了的
 
晚了晚了,不过 stdcall 可不是回调函数的意思,仅仅是一种参数的处理方式,由于 API
函数都采用这样的方式,所以定义回调函数的时候也就采用这样的方式。
下面是调用方式的比较:
Directive Parameter order Clean-up Passes parameters in registers?
register Left-to-right Routine Yes
pascal Left-to-right Routine No
cdecl Right-to-left Caller No
stdcall Right-to-left Routine No
safecall Right-to-left Routine No
 
老千,最近我遇上些朋友,一谈起你老人家,就十分佩服:
千中元啊?那个人可是很厉害的啊。。。。
搞的我立即说:“对啊,对啊,我和他是过命的交情啊。从小在越南战场上长大的啊。。。”
结果他们纷纷找我合影留念。说见到老千他老人家,一定要代他们向你请安。。。:)
 
多人接受答案了。
 
后退
顶部