delphi 程 序从exe运行改成dll库
第一种方法:
具体步骤:
1、生成新的或着打开已经存在的工程文件(DPR)(Project1.dpr)。
2、选择【View】—>【Project Manager】,选中【ProjectGroup】,然后点击【New】按纽新建一个DLL文件;
3、保存DLL文件,修改DLL文件的名称(ExeToDLLProject)与工程组的名称(ExeToDLLProjectGroup),保存成功后,会生成了一个DLL工程文件(ExeToDLLProject.dpr)和一个工程组文件(ExeToDLLProjectGroup.bpg),这个工程组由DLL和EXE组成(在【View】->【Project Manager】中看到, 选择【View】—>【Project Manager】,选中EXE工程或DLL工程,然后点击【Active】,可以切换当前工作的工程);
4、点击工具栏上【Add File To Project】,或者使用快捷键【Shift + F11】,把EXE工程文件中的所有的.pas文件加入到DLL工程中,(如:Unit1.pas)
5、当EXE工程设为当前活动的工程,然后在工程文件中,添加代码:
5、把DLL工程设为当前活动的工程,然后【Project】->【View Source】,打开DLL工程的源代码,在里面添加代码:
library ExeToDLLProject;
uses
SysUtils,
Classes,
Forms,
Controls,
Unit1 in 'Unit1.pas' {Form1},
{$R *.res}
function ShowForm:TModalResult; stdcall;
var
Form1: TForm1;
begin
Form1 := TForm1.Create(nil);
Form1.ShowModal;
FreeAndNil(Form1);
Result := MrNo;
end;
exports
ShowForm; //定义出口函数
begin
end.
第二种方法:
1、打开项目文件(.DPR),删除单元底部begin和end.之间的所有语句(一般情况下这些语句是由Delphi自动生成的)。如果项目中没有用到Form,则从uses子句中删除表单单元(Form);
2、可以在单元底部的begin语句之前加入自己定义的其他函数或者过程,用于输出。添加主窗体的输出函数:
function ShowForm:TModalResult; stdcall;
var
Form1: TForm1;
begin
Form1 := TForm1.Create(nil);
Form1.ShowModal;
FreeAndNil(Form1);
Result := MrNo;
end;
3、在单元底部的begin语句之前加入一个exports小节,然后写出所有想要输出的函数或过程的名字(最好指定索引号)。如 exports ShowForm; //定义出口函数
4、将项目文件顶部的保留字program改为library。
5、完成,可以编译了。
现在就可以在其他程序中调用本项目中的函数和过程了,只要执行ShowForm就可以执行这个项目,和执行原来的可执行文件一模一样。
delphi 程 序从exe运行改成dll库的更多相关文章
- Qt动态库静态库的创建、使用、多级库依赖、动态库改成静态库等详细说明
本文描述的是windows系统下,通过qtcreator在pro文件中添加动态库与静态库的方法: 1.添加动态库(直接添加动态库文件.dll,非子项目) 通过qtcreator创建动态库的方法就不在此 ...
- 将halcon导出的c++程序打包成dll库
1.从“文件”菜单中,选择“新建”,然后选择“项目…”. 2.从“项目类型”窗格中选择“Visual C++”下的“Win32”. 3.从“模板”窗格中,选择“Win32 控制台应用程序”. 4.为 ...
- tomcat 对 vue的history默认支持 tomcat 开启步骤 1.build文件放入webapps目录 2.进入conf目录修改server.xml端口号改成8088 3.进入bin目录运行startup.bat 4.浏览器 localhost:8088/workName 访问即可
tomcat 对 vue的history默认支持 tomcat 开启步骤 1.build文件放入webapps目录 2.进入conf目录修改server.xml端口号改成8088 3.进入bin目录运 ...
- 如何用DELPHI编程修改外部EXE文件的版本信
右击里面有修改 点开直接修改就可以了吧. DELPHI 里程序的版本信息怎么是灰色的,无法更改 耐心读以下说明,应该能解决你的问题,如果不能解决,请Hi我~ 如何给自己的dll文件添加版本信息呢? 首 ...
- Delphi中如何将 Exe 程序或其他资料打包在内,使用时再释放使用(转)
1.生成一个rc文件,文件格式如下: rname exefile "test.exe" //rname是资源名称 //exefile是资源类型 //text.exe是资源 资源类型 ...
- ASP.NET 使用mode=”InProc”方式保存Session老是丢失,无奈改成StateServer 模式。
http://blog.csdn.net/fox123871/article/details/8165431 session是工作在你的应用程序进程中的.asp.net进程.iis往往会在20分钟之后 ...
- VS2010中如何将动态链接库改成静态链接库
VS2010中如何将动态链接库改成静态链接库 VS2010静态编译生成的.exe可执行文件,可以免安装免DLL在其他电脑直接运行. 静态编译:就是在编译可执行文件的时候,将可执行文件需要调用的对应动态 ...
- 关于.Net中Process的使用方法和各种用途汇总(二):用Process启动cmd.exe完成将cs编译成dll
上一章博客我为大家介绍了Process类的所有基本使用方法,这一章博客我来为大家做一个小扩展,来熟悉一下Process类的实际使用,废话不多说我们开始演示. 先看看我们的软件要设计成的布局吧. 首先我 ...
- python学习——将while循环改成函数
笨办法学python第33节 这一节主要学习内容是while循环,记录内容为将while改成函数,首先源代码如下: i = 0 numbers = [] while i < 6: print & ...
随机推荐
- Lucas定理学习笔记
从这里开始 一个有趣的问题 扩展Lucas算法 一个有趣的问题 题目大意 给定$n, m, p$,求$C_{n}^{m}$除以$p$后的余数. Subtask#1 $0\leqslant m\leq ...
- 对象new和不new的理解
1.现象 在一个线程类[QObject]中声明一个对象QTimer,[不new,直接声明],在槽函数中timer.start() 报警告:不能跨线程调用对象 2.分析 不使用new的方式,直接A a; ...
- javaEE体系结构【转载】
转载自: http://blog.csdn.net/chjskarl/article/details/72629014?locationNum=3&fps=1 JavaEE是一套使用Java进 ...
- linux内核中的linuxPPS是什么?
答: linux每秒脉冲数(linux pulse per second),LinuxPPS 在系统中提供一个编程接口(API)去定义几个PPS源; 一个PPS源就是一个每秒能提供高精度信号的设备,以 ...
- 用vim + xdebug 来追踪thinkphp的执行过程
tree命令的使用几个有实际应用的参数 -a 这是默认的 -d: 只显式目录, 不需要显式目录下的文件 -L: 列出显式的深度. 当前目录下的所有东西为第一级... 在tp下, 有多个Common但是 ...
- luogu P4051 [JSOI2007]字符加密
前言 其实就是个后缀数组模板题 可还是有几个的地方不太明白 思路 先将子串复制一遍,组成长度为2*n的子串 给出的子串一定会在前n个后缀 而且后面的优先级不会影响前面的相对大小 然后求得sa输出就好 ...
- html 之 position 绝对定位与相对定位(待补充)
相对定位:对于区块标签而言,占着原有的空间 绝对定位:对于网页而言,不占原来的空间
- BZOJ 4771 七彩树(可持久化线段树合并)
题意 https://www.lydsy.com/JudgeOnline/problem.php?id=4771 思路 和 HDU 3333 其实有点像,不过是把序列的问题放在了树上,多维护一个深度即 ...
- HDU 6191 Query on A Tree(可持久化Trie)
题意 \(n\) 个点的有根树,根为 \(1\) .每个点有点权,有 \(q\) 个询问,每次询问以 \(u\) 为根的子树的点的点权中异或 \(x\) 所得的最大值是多少. 思路 求出整棵树的 \( ...
- 中文目录对 sublime text 有什么影响?
用了这软件好几个月了,一直没出现问题.最近做精简时,发现一个奇怪的问题. 相同的配置,为什么两个程序表现得不一样? 难道是哪里的配置不一样? 难道是插件被我精简得太厉害了? 难道是插件有依赖文件被我删 ...