dll如何跳出循环?

CB1013 2019-04-02 03:35:52
BookMark:= DM.mtMember.Bookmark;
try
BookMarkList:= GridMember.SelectedRows;
for i:= 0 to BookMarkList.Count -1 do
begin
DM.mtMember.Bookmark:= BookMarkList[i];
HInst:=LoadLibrary('DoorCard.dll');
try
if HInst >0 then
begin
@ShowDoorfrm:=GetProcAddress(HInst,'ShowDoorfrm');
if @ShowDoorfrm<>nil then
begin
......
end;
end else
ShowMessage('DoorCard.dll文件不存在!');
finally
FreeLibrary(HInst);
end;
end;
finally
DM.mtMember.Bookmark:= BookMark;
end;
问:上面写法dll不能中途退出,如何做到中途退出?
...全文
116 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
doloopcn 2019-04-03
  • 打赏
  • 举报
回复
就如上面说的先加一个状态字BreakOp

不过,就算加了,在For循环中能键盘手工退出的机率并不大,一般都有卡死的状态发生,应该在For循环开始的时候加入:
Application.ProcessMessages
lao_yunger 2019-04-02
  • 打赏
  • 举报
回复
ShowMessage('DoorCard.dll文件不存在!'); 这句就不要了
lao_yunger 2019-04-02
  • 打赏
  • 举报
回复
try if HInst >0 then begin @ShowDoorfrm:=GetProcAddress(HInst,'ShowDoorfrm'); if @ShowDoorfrm<>nil then begin ...... end; end else ShowMessage('DoorCard.dll文件不存在!'); finally FreeLibrary(HInst); if getlasterror()<>0 then raise........ end;
  • 打赏
  • 举报
回复
需要在循环中检查一个退出标志:
BreakOp := false;
for i:= 0 to BookMarkList.Count -1 do
begin
//...
if BreakOp then break;
end;
BreakOp在其他代码中根据条件设置
易语言 CRC32.ec校验模块 林子深作品 比其他的都便宜 CRC32.ec校验模块 林子深作品 下载 CRC32.ec校验模块下载 我们很有必要给自己的软件加上更好的保护。CRC校验就是其中的一种不错的方法。 CRC是什么东西呢?其实我们大家都不应该会对它陌生,回忆一下?你用过RAR和ZIP等压缩软件吗?它们是不是常常会给你一个恼人的“CRC校验错误”信息呢?我想你应该明白了吧,CRC就是块数据的计算值,它的全称是“Cyclic Redundancy Check”,中文名是“循环冗余码”,“CRC校验”就是“循环冗余校验”。 CRC有什么用呢?它的应用范围很广泛,最常见的就是在网络传输中进行信息的校对。其实我们大可以把它应用到软件保护中去,因为它的计算是非常非常非常严格的。严格到什么程度呢?你的程序只要被改动了一个字节(甚至只是大小写的改动),它的值就会跟原来的不同。呵呵,是不是很厉害呢?所以只要给你的“原”程序计算好CRC值,储存在某个地方,然后在程序中随机地再对文件进行CRC校验,接着跟第一次生成并保存好的CRC值进行比较,如果相等的话就说明你的程序没有被修改/破解过,如果不等的话,那么很可能你的程序遭到了病毒的感染,或者被奸人用16进制工具暴力破解过了。 CRC的本质是进行XOR运算,运算的过程我们不用管它,因为运算过程对最后的结果没有意义;我们真正感兴趣的只是最终得到的余数,这个余数就是CRC值。 易语言用户林子深提供了一个CRC32.EC的易模块,这个模块可以在论坛上或资源网上搜索到。大家可以直接拿过来用,导入易语言后如下图所示: 调用方式可为如下代码: 判断(取循环风俗冗余校验和(读入文件(取执行文件名()))= 18293823767) 其中上述的数字为主程序的CRC码值。 大家可以利用上述特性,即结果是数值的特性,不用进行比较,而是用加减法的方法得出前后两个CRC验的差值,如果为0,那说明两个数字是相等的,主程序没有被改动过。否则就是被改过的。 例如下述代码: 程序被改 = 1 计次循环首(取绝对值(取循环风俗冗余校验和(读入文件(取执行文件名()))- 18293823767),) 程序被改 = 0- 跳出循环() 计次循环尾() 返回(程序被改) 上述代码中,“取绝对值()”是将负数也转换为正数,以方便进行计次循环。 上述代码中,数值型变量“程序被改”为1表示没有被改动过,如果为0表示被改动过。返回的数值就可以进行一些陷阱的计算了。 我的方案的缺点分析: CRC-32的值其实可以由奸人自行计算得出后,重新写入到程序验证处。这样的话,我们做的工作岂不是没有意义了? 其实解决的方法还是有的,我们可以在计算CRC-32值之前,对参与转换的字符串加点手脚,例如对这个字符串进行移位、xor等操作,或者把自己的生日等信息加入到字符串中,随你的便什么都行,总之不是单纯的文件的内容就行了,然后在最后比较的时候,也用同样的方法反计算出CRC-32值。这样得到的CRC-32就不是由文件的内容计算出来的,相信对破解者的阻力也会加大不少。 总结: 以上的方法大家都可以在软件中采用,最好写到一个DLL文件中,然后多放几个需要验证的子程序,随时以备调用即可。
第一章、基础知识 1.1 基本数据类型 1.2 变量和常量 1.2.1 变量和常量的命名 1.2.2 变量的作用范围 1.2.3 静态变量 1.2.4 变量的初始值 1.3 运算符 1.3.1运算符的优先级 1.4流程控制 1.4.1 如果、如果真、判断 1.4.2 判断循环、循环判断 1.4.3 计次循环、变量循环 1.4.4 到循环尾、跳出循环 1.4.5 返回、结束 1.5 子程序(函数) 1.5.1 子程序参数(参考、可空) 1.5.2 子程序的递归 1.5.3 子程序的静态局部变量 1.6 自定义数据类型 1.6.1[例]黑客帝国屏保 1.6.2 自定义数据类型的内存存储 1.7 数组 1.7.1 数组的维数 1.7.2 数组的排序 1.7.2.1冒泡排序 1.7.2.2 选择排序 1.7.2.3 插入排序 1.7.2.4 快速排序 1.7.2.5 自定义数据类型数组的多级排序 1.7.3 [例]扫雷游戏 第二章、字节集 2.1 深入讨论字节集相关函数 2.1.1 取字节集长度 2.1.2 取字节集数据 2.1.3 指针到字节集 2.2 [例] 十六进制查看器 2.3 [例] 无需合并程序的文件分割机 2.4 [例] 生成EXE文件并在其中写入配置信息 2.5 [例] 文件捆绑机 2.6 [例] 程序的自校验 2.7 使用字节集的注意事项 不要操作大的文件 不要频繁地进行字节集相加和转换 《将字节集显示为十六进制》 《文件分割机》 《配置信息写入exe文件》 《数据隐藏》 《电子贺卡》 《可执行文件图标的读取与替换》 《exe文件捆绑》 《exe文件的自校验》 第三章、Windows 编程 3.1 窗口、句柄、控件和菜单 3.2 几个相关的工具软件 3.2.1 MySpy 3.2.2 WinSpy 3.2.3 Spy++ 3.3 窗口管理 3.3.1 什么是API 3.3.2 窗口管理相关的API函数 3.3.3 [例] 懒惰的窗口 3.3.4 获取特定的窗口或控件句柄 3.3.5 [例]通过窗口句柄来限制程序只运行一个实例 3.3.6 枚举窗口 3.3.6.1 使用EnumWindows函数来枚举窗口 3.3.6.2 使用GetWindow来生成系统窗口树 3.3.7 [例] 窗口侦查工具 3.4 消息、消息循环、窗口过程 3.4.1 白手起家-凭空创建窗口 3.4.2 使用控件-枚举并预览系统已安装字体 3.4.3 万能的SendMessage 3.4.3.1 常用的消息值及其参数含义 广播消息 3.5 窗口的子类化 文件拖放 向前一个实例发送信息 屏蔽超级浏览框右键菜单 窗口、控件、菜单皮肤 可撕下的菜单 窗口、控件、菜单 内存管理 进程和线程 进程间通信 管道 服务管理 注册表 文件关联、命令行处理、文件右键菜单 枚举注册表 注册表模拟器 dll编程 钩子 进程黑名单 键盘和鼠标 软键盘 键盘和鼠标钩子 使用键盘钩子屏蔽Win键 使用键盘钩子 <枚举窗口,枚举进程> <使窗口可移动> <窗口子类化> <动态菜单> 可撕下的菜单、自画菜单、动态菜单 <动态组件> <文件拖放> <读取dll中的资源-扑克牌图片> <读DOS程序执行结果> <自制皮肤> <远程线程> <给打开文件对话框加预览窗口> 。。。。。 打印机。枚举。。。 文件格式编程 读位图文件格式 取EXE文件的图标和替换图标 给自己的文件格式加上预览图标 《编写自己的文件格式》 文件系统 <模拟资源管理器> <文件格式> 易语言模块编程 图像处理 取图像宽度、高度 取像素字节集 各种图像运算方法 面向对象编程 类、封装、属性、行为、继承、多态性 矢量图形(面向对象程序设计) CAD 系统 EMF 文件的读写 OpenGL 三维图形编程 DirectX 游戏编程 网络编程 <聊天程序> <远程控制> <邮箱登录器> <天气查询> 数据库编程 界面编程 <使用《易容大师》进行界面编程>

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧