在delphi中,DLL加载时做初始化的Demo
library DLLEntry;//dll源码 uses
SysUtils,
Classes,
Dialogs,
Windows; {$R *.res} procedure DLLEntryPoint(dwReason : DWord);
begin
case dwReason of
DLL_PROCESS_ATTACH : showMessage('映射到进程地址空间');
DLL_PROCESS_DETACH : showMessage('从进程的地址空间分离出来');
DLL_THREAD_ATTACH : showMessage('创建了一个新线程');
DLL_THREAD_DETACH : showMessage('一个线程正在退出');
end;
end; begin
{首先,把一个过程的指针赋给DLLProc变量}
DLLProc := @DLLEntryPoint;
{调用这个过程}
DLLEntryPoint(DLL_PROCESS_ATTACH);
end.
[delphi] view plaincopy
unit mainfrm;//exe源码 interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons; type
//定义一个测试线程
TTestThread = class(TThread)
procedure Execute; override;
end;
TMainForm = class(TForm)
btnLoadLib: TBitBtn;
btnFreeLib: TBitBtn;
BtnCreateThread: TBitBtn;
BtnFreeThread: TBitBtn;
lblCount: TLabel;
procedure btnLoadLibClick(Sender: TObject);
procedure btnFreeLibClick(Sender: TObject);
procedure BtnCreateThreadClick(Sender: TObject);
procedure BtnFreeThreadClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
LibHandle: THandle;
TestThread: TTestThread;
Counter: integer;
GoThread: Boolean;
{ Private declarations }
public
{ Public declarations }
end; var
MainForm: TMainForm; implementation {$R *.dfm} //线程执行过程
procedure TTestThread.Execute;
begin
while MainForm.GoThread do
begin
MainForm.lblCount.Caption := IntTostr(MainForm.Counter);
Inc(MainForm.Counter);
end;
end; procedure TMainForm.FormCreate(Sender: TObject);
begin
LibHandle := 0;
TestThread := nil;
end; //这个过程用于调入动态链接库DLLEntry.dll
procedure TMainForm.btnLoadLibClick(Sender: TObject);
begin
if LibHandle = 0 then
begin
LibHandle := LoadLibrary('DLLEntry.dll');
if LibHandle = 0 then
raise Exception.Create('Unable to Load DLL');
end
else
MessageDlg('Library already Loaded', mtWarning, [mbok], 0);
end; //这个过程用于释放链接库
procedure TMainForm.btnFreeLibClick(Sender: TObject);
begin
if not (LibHandle = 0) then
begin
FreeLibrary(LibHandle);
LibHandle := 0;
end;
end; //创建一个线程
procedure TMainForm.BtnCreateThreadClick(Sender: TObject);
begin
if TestThread = nil then
begin
GoThread := True;
TestThread := TTestThread.Create(false);
end;
end; //释放一个线程
procedure TMainForm.BtnFreeThreadClick(Sender: TObject);
begin
if not (TestThread = nil) then
begin
GoThread := False;
TestThread.Free;
TestThread := nil;
Counter := 0;
end;
end;
end.
在delphi中,DLL加载时做初始化的Demo的更多相关文章
- 百度编辑器ueditor 异步加载时,初始化没办法赋值bug解决方法
百度编辑器ueditor 异步加载时,初始化没办法赋值bug解决方法 金刚 前端 ueditor 初始化 因项目中使用了百度编辑器——ueditor.整体来说性能还不错. 发现问题 我在做一个编辑页面 ...
- ASP.NET中页面加载时文本框(texbox控件)内有文字获得焦点时文字消失
代码如下: <asp:TextBox ID="TextBox1" runat="server" Height="26px" MaxLe ...
- Delphi中动态加载TreeView信息
unit Unit3; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...
- react 如何处理页面加载时无法将获取缓存信息存入全局变量中
最近在做一个权限功能时,发现在读取用户公司ID进行列表查询 时,无法钭读取到缓存中的数据存入页面全局变量中进行加载查询 将问题代码整理出来 将信息存入缓存: let menuList = Helper ...
- 出现了内部错误-网站中X509Certificate2加载证书时出错
今天给网站配置了加密证书文件,用类X509Certificate2加载证书文件时,一直报出现了内部错误,但是Demo中用控制台程序加载证书没任何问题 读取证书文件的语句: X509Certificat ...
- 页面加载时,页面中DIV随之滑动出来;去掉页面滚动条
<head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8&quo ...
- 微信支付,退款时,出现了内部错误-网站中X509Certificate2加载证书时出错
今天给阿里云,虚拟主机 网站配置了加密证书文件,用类X509Certificate2加载证书文件时,一直报出现了内部错误,但是Demo中用控制台程序加载证书没任何问题 读取证书文件的语句: X509C ...
- easyui datagrid 加载 历险记(dom中已经加载,fit:true 时改变浏览器大小是会显示出来)
(dom中已经加载,fit:true 时改变浏览器大小是会显示出来) 第一个想到的就是resize datagird 大小!可是没有用 ... 答案是加载的的div height为0导至的(//To ...
- 如何让在Html中特殊字符被数据加载时对于html标签的自动转义 补充
1.将此过滤器添加到ng-bind-html所绑定的数据中,便实现了在数据加载时对于html标签的自动转义. <div ng-repeat="item in list" &g ...
随机推荐
- this.button1.Click += new System.EventHandler(this.button1_Click);
在这个程序里,这里的修改是为了更好理解,当然这种写法是语法错误的. 下面我们对其进行分析: 首先,观察“=”右面的表达式. new System.EventHandler(this.button1_C ...
- how to enable #ifdef macro in the command line of make?
Compilers normally use the -D flags eg Code: test.o: test.cpp $(CC) $(CFLAGS) -DTEST1 test.cpp -o $@
- PAT 天梯赛 L1-009 N个数求和
模拟题 题目链接 题解 每次将两个分数进行相加,到最后再将结果化成带分数.主要考察的最大公约数与最小公倍数. 代码如下: #include<cstdio> #include<cstd ...
- With PHP frameworks, why is the “route” concept used?
http://programmers.stackexchange.com/questions/122190/with-php-frameworks-why-is-the-route-concept-u ...
- Java内存回收 - 落日之心的日志 - 网易博客
body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...
- flume-1.6.0单节点部署
这个不多说,直接上干货,部署很简单! 步骤一:flume的下载 当然,这里也可以使用wget命令在线下载,很简单,不多说. 步骤二:flume的上传 [hadoop@djt002 flume]$ ls ...
- seajs的常用api简易文档
目前使用sea.js的公司越来越多, 比如朋友网,阿里巴巴,淘宝网,百姓网,支付宝,有道云笔记等.模块化的javascript开发带来了可维护,可扩展性,尤其在多人协作开发的时候不用再担心文件依赖和函 ...
- 变量-数据类型-对象-如何编写python脚本
标识符的命名规则变量是标识符的例子. 标识符 是用来标识 某样东西 的名字.在命名标识符的时候,你要遵循这些规则:标识符的第一个字符必须是字母表中的字母(大写或小写)或者一个下划线(‘ _ ’).标识 ...
- 结对编程--Goldpoint Game
黄金点游戏 黄金点游戏描述: N个同学(N通常大于10),每人写一个0~100之间的有理数 (不包括0或100),交给裁判,裁判算出所有数字的平均值,然后乘以0.618(所谓黄金分割常数),得到G值. ...
- (中等) POJ 2828 Buy Tickets , 逆序+线段树。
Description: Railway tickets were difficult to buy around the Lunar New Year in China, so we must ge ...