Delphi (Library Path Browsing Path)
首先要明白的一个概念是dcu文件
*.dcu是*.pas的编译后单元文件(Delphi Compiled Unit), 编译器把它和库文件连接起来就构成了可执行文件*.exe 或*.dll等,相当于C中的obj文件。
你所说的AgentObjects_TLB.dcu文件不一定在你的机器存在过它很可能是被编进
*.bpl库文件中的,不是单独存在的,IDE环境下出错后有时不报*.bpl,而是报它的组成部分。
编译时,源文件没有修改过的,就不会再次编译,直接调用dcu文件。所以有些第三方组件为了保护代码,就不提供pas文件,值提供dcu,也可以运行。
但是如果和别的单元有依赖性,就需要重新编译了,需要pas文件。
所以Library Path设置的就是编译器查找源文件或dcu编译文件的路径
如果没有dcu,则编译pas文件生成之;如果有dcu,又不是build则直接拿dcu来连接
(在注册表中Library Path的名称为search path; 而Project-option里面也有一个search path,很搞是吧, 那个search path是项目级别的搜索路径,而前一个是系统级别的)
那么browsing path是设置什么的呢?
它是设置代码浏览器查找源代码的路径, 不设这个路径不影响运行。
但它还有另外一个目的:http://www.delphibbs.com/delphibbs/dispq.asp?lid=995504讲了这个。
我们以raize组件为例
Library Path为D:\Program Files\Borland\Component\Raize.v4.02\RC4\Lib\Delphi7
里面没有pas文件,只有dfm和dcu文件
Browsing Path为:D:\Program Files\Borland\Component\Raize.v4.02\RC4\Source
里面有所有dfm,pas,dpk文件,但没有dcu
很清楚这样做的目的是保护pas文件被意外修改后, 不会编译, 不会影响到dcu文件; 但又能自由浏览调试源文件。
Raize的bin目录是存放bpl文件的,里面有两个设计时包, 这是IDE中Known packages用到的
还有一个System32子目录,里面还有两个包,这是运行时包,复制到系统目录下。
同样delphi自身的组织也是这样
Lib目录里面都是dcu,没有源代码
Imports目录里面是导入的空间的dcu
Bin目录中都是bpl,dll,exe
Projects\Bpl中都是自己编译的第三方组件生成的bpl
Source目录中都是pas文件,分为多个目录组织
所以如果要修改delphi源代码(当然不鼓励这样做), 先要把pas拷到Lib目录中,生成新的dcu,覆盖掉老的,如:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=404099
DELPHI怎么跟踪进VCL库文件里或者第三方控件的单元里?
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2071839
如何制作控件安装程序
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2053286
Delphi (Library Path Browsing Path)的更多相关文章
- os.path.exists(path) 和 os.path.lexists(path) 的区别
使用os.path.exists()方法可以直接判断文件是否存在.代码如下:>>> import os>>> os.path.exists(r'C:\1.TXT') ...
- os.path.isdir(path)异常
Window 10家庭中文版,Python 3.6.4, 当一个路径以多个斜杠(/)或反斜杠字符(\\)结尾时,os.path.isdir(path)函数仍然将它们判断为目录: >>> ...
- InstallShield Build Error -1014: Cannot rename directory <PATH> to <PATH>\folder.Bak.
InstallSheild执行Build结果错误: 错误详细信息: Cannot rename directory <PATH> to <PATH>\folder.Bak. W ...
- os.path.join合并 os.path.dirname返回上一级目录 os.path.exists(path) os.stat('path/filename')获取文件/目录信息
import os str1 = "grsdgfd" str2 = "wddf" str3 = "gddgs" # print(str1 + ...
- os模块 os.stat('path/filename') os.path.dirname(path) os.path.exists(path) os.path.join(path1[, path2[, ...]])
提供对操作系统进行调用的接口 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录:相当于 ...
- difference in physical path, root path, virutal path, relative virtual path, application path and aboslute path?
http://stackoverflow.com/questions/13869817/difference-in-physical-path-root-path-virutal-path-relat ...
- maven library has broken path和pom jar包导入失败
今天在打开项目的时候,在pom文件添加新的依赖文件发现很多jar都标红,显示不存在,自己查了一上午各种尝试,总结了以下的解决方法. 首先你打开File-Project Structrue-Module ...
- delphi win7 and high path
Close DelphiLocate bordbk120N.dll (C:\Program Files (x86)\CodeGear\RAD Studio\6.0\bin)Make a backup ...
- Project 'king.commons' is missing required library: 'lib/plweb.jar' Build path Build Path Problem
问题描述:之前在项目里引用一个jar 包,后来不用了删掉 ,但是没有删干净,然后报以下错误. 解决方案: 1.删除libraries 2.找到该项目下的 .classpath 文件,用记事本打开 ,删 ...
随机推荐
- 前端使用 Nginx 反向代理彻底解决跨域问题
引入网址https://blog.csdn.net/larger5/article/details/81286324 1.请求后端数据失败 代码: <!DOCTYPE html> < ...
- Python:Day04
数学运算符: + 加 - 减 * 乘 ** 指数运算 / 除 // 整除 % 取余 比较运算符: > 大于 < 小于 >= 大于等于 <= 小于等于 == ...
- 007_Mac上安装Node和NPM
一.推荐brew来对node和npm版本进行管理. <1>确保brew是安全可靠的,代码如下: $ brew doctor #直接install node会有以下报错https://git ...
- 001_HTTP参数中Etag的重要性
在研究tornado时,有个Etag比较好奇,从网上查询摘录如下:
- hyperledge工具-configtxgen
参考http://www.blockchainbrother.com/article/1339 configtxgen是Hyperledger Fabric提供的用于通道配置的实用程序,主要生成以下3 ...
- solidity learning (1)
学习文档笔记:http://solidity-cn.readthedocs.io/zh/develop/layout-of-source-files.html 1.pragma solidity ^0 ...
- day1-pycharm使用
1.Ctrl+滑轮 字体大小 2.改变字体大小 3.开头模板 4.多行注释 ctrl+? 5.切换Python版本解释器
- Vue.js项目详解
还是以Blog项目来讲解,最近我本人利用闲暇时间,以博客作为参考学习一些新的技术并尝试之前没有尝试过的思路来玩玩. 技术看似枯燥,但是带有一个目的来学,你会发现还是蛮有趣的. 主要实践的就是前后端分离 ...
- 环境部署(二):Linux下安装jenkins
jenkins是一个Java开发的开源持续集成工具,广泛用于项目开发,具有自动化构建.测试和部署等功能,它的运行需要Java环境. 上篇博客介绍了Linux下安装JDK的步骤,这篇博客,介绍下Linu ...
- Postman的Tests标签测试
接口测试最重要的就是返回数据的检查,一个简单的接口,我们可以肉眼检查返回数据,但接口一旦多起来且复杂,每次的检查都会很费劲,此时我们就需要postman 的tests模块来代替 postman面板: ...