第十章动态链接库编程一内容摘要:
ExitProc 为 nil。 下边的一段程序包含一个退出过程和一段初始化代码,用来说明如何正确设置退出过程。 library Test。 {$S} uses WinTypes, WinProcs。 var SaveExit: Pointer。 procedure LibExit。 far。 begin if ExitCode = wep_System_Exit then begin { 系统关闭时的相应处理 } end else begin { DLL 卸出时的相应 处理 } end。 ExitProc := SaveExit。 { 恢复原来的退出过程指针 } end。 begin {DLL 的初始化工作 } SaveExit := ExitProc。 { 保存原来的退出过程指针 } ExitProc := @LibExit。 { 安装新的退出过程 } end. 在初始化代码中,首先把原来的退出过程指针保存到一个变量中,而后再把新的退出过程地址赋给 ExitProc。 而在自定义退出过程 LibExit 结束时再把ExitProc 的值恢复。 由于 ExitProc 是一个系统全局 变量,所以在结束时恢复原来的退出过程是必要的。 退出过程 LibExit 中使用了一个系统定义变量 ExitCode,用于标志退出时的状态。 ExitCode 的取值与意义如下: 表 ExitCode 的取值与意义 ━━━━━━━━━━━━━━━━━━━━━ 取 值 意 义 ————————————————————— WEP_System_Exit Windows 关闭 WEP_Free_DLLx DLLs 被卸出 ━━━━━━━━━━━━━━━━━━━━━ 退出过程编译时必须关闭 stack_checking,因而需设置编译指示 {$S}。 编写一般 DLLs 的应用举例 在下面的程序中我们把一个字符串操作的函数储存到一个 DLLs 中,以便需要的时候调用它。 应该注意的一点是:为了保证这个函数可以被其它语言编写的程序所调用,作为参数传递的字符串应该是无结束符的字符数组类型 (即 PChar类型 ),而不是 Object Pascal 的带结束符的 Srting 类型。 程序清单如下: library Example。 uses SysUtils, Classes。 {返回字符在字符串中的位置 } function InStr(SourceStr: PChar。 Ch: Char): Integer。 export。 var Len,i: Integer。 begin Len := strlen(SourceStr)。 for i := 0 to Len1 do if SourceStr[i] = ch then begin Result := i。 Exit。 end。 Result := 1。 end。 exports Instr Index 1 name 39。 MyInStr39。 resident。 begin end. 调用 DLLs 有两种方法可用于调用一个储存在 DLLs 中的过程。 使用一个外部声明子句,使 DLLs 在应用程序开始执行前即被装入。 例如: function Instr(SourceStr : PChar。 Check : Char)。 Integer。 far。 external 39。 UseStr39。 使用这种方法,程序无法在运行时间里决定 DLLs 的调用。 假如一个特定的DLLs 在运行时无法使用,则应用程序将无法执行。 使 用 Windows API 函数 LoadLibray和 GetProcAddress 可以实现在运行时间里动态装载 DLLs 并调用其中的过程。 若程序只在其中的一部分调用 DLLs 的过程,或者程序使用哪个 DLLs, 调用其中的哪个过程需要根据程序运行的实际状态来判断,那么使用动态调用就是一个很好的选择。 使用动态调用,即使装载一个 DLLs 失败了,程序仍能继续运行。 静态调用 在静态调用一个 DLLs 中的过程或函数时, external 指示增加到过程或函数的声明语句中。 被调用的过程或函数必须采用远 调用模式。 这可以使用 far 过程指示或一个 {$F +}编译指示。 Delphi 全部支持传统 Windows 动态链接库编程中的三种调用方式,它们是: ● 通过过程 /函数名 ● 通过过程 /函数的别名 ● 通过过程 /函数的顺序号 通过过程或函数的别名调用,给用户编程提供了灵活性,而通过顺序号(Index)调用可以提高相应 DLL的装载速度。 动态调用 动态调用中的 API 函数 动态调用中使用的 Windows API 函数主要有三个 ,即: Loadlibrary,GetProcAddress 和 Freelibrary。 : 把指定库模块装入内存 语。第十章动态链接库编程一
相关推荐
外封面的构成 刊名、卷期等文字是外封面的重点。 在设计外封面时,首先就应该注意突出外封面刊名、卷期等文字,尤其是刊名,它是重中之重。 期刊名不宜中途变换。 在外封面上所用刊名字体也不宜中途变换;对一份成功的期刊来说,刊名和所用刊名 标准字是一笔无形资产。 外封面的图片风格,即便每期更换,但应保持其总体风格不变,保持图画的统一性和关联性。 如青年文摘、红版、绿版,读者那一种风格。 三、封面设计要求
断。 所以在 t2 到 t3 时刻,二极管导电,C 充电, Vi=Vo 按正弦规律变化; t1 到 t2时刻二极管关断, Vi=Vo按指数曲线下降,放电时间常数为 RLC。 电容滤波过程见图。 图 电容滤波电路波形 需要指出的是,当放电时间常数 RLC 增加时, t1 点要右移, t2 点要左移,二极管关断时间加长,导通角减小;反之, RLC 减少时,导通角增加。 显然。 当 R L很小,即
素分泌的调节 激素分泌的调节是一种负反馈调节机制。 调节的一般途径 是: 大脑皮层 → → → → → → → 如甲状腺激素分泌的调节机制:(填右图) 机体调节内分泌活动的枢纽是 ,但它的活动 也要受 的支配。 例 许多淡水鱼在人工饲养条件下不产卵,常取同种鱼的脑下垂体研碎注入鱼体内,可促其产卵,这主要是利用垂体中含有的( ) ( )激素 ( )激素 ( )激素 寒冷、过度紧张等 + + — —
的拨款项目完成后,按规定转入资本公积的部分。 外币资本折算差额,是指企业接受外币资本投资时 因所采用的汇率不同而产生的资本折算差额,即在受到外币资本日的市场汇率与投资合同或协议约定的外币折算汇率不一致的情况下,按收到外币资本日的市场汇率折算为资产入账的价值,与按照约定汇率折算为实收资本入账的价值的差额。 关联交易差价,是指上市公司与关联方之间显失公允的关联交易所形成的差价。 其他资本公积
派股票股利,应于实际分派股票股利时,借记 “ 利润分配 —— 转作资本 (或股本 )的普通股股利 ” 账户,贷记 “ 实收资本 ”( 或 “ 股本 ”) 账户。 ( 7)当股东大会或类似机构批准的利润分配方案与董事会或类似机构提请批准的报告年度利润分配方案不一致时,其差额应当调整批准年度会计报表有关项目的年初数。 调整增加的利润分配,借记 “ 利润分配 —— 未分配利润 ” 账户,贷记 “