• 请不要在回答技术问题时复制粘贴 AI 生成的内容
JustinL
V2EX  ›  程序员

Delphi 开发中,既保护源码,又可以分模块 dubug 的方法

  •  
  •   JustinL · Jan 18, 2023 · 2102 views
    This topic created in 1239 days ago, the information mentioned may be changed or developed.

    背景:公司不是软件公司,所以对程序开发的流程其实不擅长。公司原来有一套 delphi 程序,是一个内部用的桌面程序,最近拿出来迭代,既需要修 bug ,也需要加功能。

    但是代码作者不想给出所有源码。所以请教一下,有没有可能做到:

    1. 代码作者还是拿着全套代码,但是会发出个别 form
    2. 其他人也能 debug 这个 form ?
    3. 最好能对原代码做尽可能少的改动

    我理解不单 Delphi 有这个需求?是不是其他编译型的语言也有这个需求?再次说明一下非专业软件公司,都是为了内部提高效率的软件,很多程序员的通用做法实在是不了解。谢谢! (delphi 节点好像有点冷清,姑且放在程序员节点,见谅。)

    defunct9
        1
    defunct9  
       Jan 18, 2023
    老古董了
    minibear2021
        2
    minibear2021  
       Jan 18, 2023
    乘着你们还用得上,让作者出个价卖给你们,回头烂家里更不值钱了:)
    JustinL
        3
    JustinL  
    OP
       Jan 18, 2023
    想强调一下,其实这个和 Delphi 老不老不强相关,因为本质是源码管理问题。
    hsfzxjy
        4
    hsfzxjy  
       Jan 18, 2023 via Android
    我记得 delphi 的 unit 可以编译成某种二进制的中间文件(好像是.dcu ),只发布 dcu 不公开源码,别人也可以编译,但看不到源码

    时间太久远了,不确定是对的
    JustinL
        5
    JustinL  
    OP
       Jan 18, 2023
    @hsfzxjy 非常感谢,是一个有用的信息。
    0TSH60F7J2rVkg8t
        6
    0TSH60F7J2rVkg8t  
       Jan 18, 2023
    作为 delphi 开发者来回答一下,不愿意释出源码的作者可以编译“release”版本的 dcu 文件,只要 dcu 文件和 dfm 文件存在,你都可以二次开发,编译都没问题。但是你只能改自己的代码,调试自己的代码,一旦要单步进入那个作者的代码,你只能看到 cpu 汇编指令,无法修改对应的源代码(因为你也没有源代码)。这是多数 vcl 第三方组件的分发方式。

    综上,楼主的 3 个疑问,答案都是“肯定”的。都可以做到。
    0TSH60F7J2rVkg8t
        7
    0TSH60F7J2rVkg8t  
       Jan 18, 2023
    对了,补充一点,这种分发方式有一个限制,就是对于不同版本的 IDE (包括打补丁和不打补丁,都是不同版本的),需要编译对应的 dcu 文件,一旦你的开发环境和那位作者的不一样,由于依赖的 vcl 本身的 dcu 版本不一样,可能会出现报错无法编译的问题。
    JustinL
        8
    JustinL  
    OP
       Jan 18, 2023
    @ahhui 非常感谢!关于“编译 “release” 版本的 dcu 文件”,请问是他那边整个项目都编译成一个 dcu ,还是每个 unit 都编译成 dcu ,得到一堆的 dcu s ?另一方面,我这边可以怎样引入这些 dcu ?
    vicalloy
        9
    vicalloy  
       Jan 18, 2023
    @ahhui 已经说的比较详细了。dcu 是 delphi 的静态链接库,有完整的 dcu 和资源文件就可以正常编译。
    原作者可以提供完整 dcu 和部分源代码。
    感觉是公司想省钱。找原作者好好谈谈,得这点钱还是不要省的好。
    vicalloy
        10
    vicalloy  
       Jan 18, 2023
    我印象中 Delphi 的 dcu 不包含调试信息,不区分 release 和 debug 版。每个.pas 都会生成一个 dcu 。你把 dcu 放到项目的搜索路径下就可以找到。
    terence4444
        11
    terence4444  
       Jan 18, 2023 via iPhone
    也可以考虑通过外部 dll 的方式调用?
    youxiachai
        12
    youxiachai  
       Jan 18, 2023
    为什么不出钱..直接买断....
    0TSH60F7J2rVkg8t
        13
    0TSH60F7J2rVkg8t  
       Jan 18, 2023
    @JustinL 他可以编译成不同的文件给你,有的文件不想给源代码,就编译 release 的版本,想给源代码,就带 pas 给你,但如果带 pas 给你,那他得编译两套,也就是 debug 和 release 的 dcus 都要给你,不然你在 ide 的 debug 下可能无法编译部分文件。

    你的项目中,点击 Project->Project Options, Delphi Compiler->Search path 里,加上它给你的所有 dcu 所在的目录即可编译。注意如果他给你了 debug 和 release 两个版本的 dcu ,那么你在 Project Options, Delphi Compiler, Target 里,要给 debug configuration 和 release configuration 设置不同的 Search path ( debug configuration 使用包含它 debug 版本的 dcus 文件的目录、release configuration 使用包含它 release 版本的 dcus 文件的目录),然后你直接在你的 pas 的 uses 里引用它的单元即可编译。
    0TSH60F7J2rVkg8t
        14
    0TSH60F7J2rVkg8t  
       Jan 18, 2023
    @vicalloy 包含调试信息的,而且依赖 rtl, vcl 里的 dcu 也是两套,不匹配无法在自己项目的 configuration 里编译
    0TSH60F7J2rVkg8t
        15
    0TSH60F7J2rVkg8t  
       Jan 18, 2023
    @terence4444 delphi 用 dll 挺麻烦的,接口写的不好踩的坑比 C++还麻烦。但是 delphi 用 bpl 是可以的,bpl 就是 delphi 自己的 dll 。但一样,要分 debug 和 release 版本,而且对应版本的 dcu 也必须带着,因为编译的时候还是会找这些文件。只不过 runtime 的 bpl 可以直接随软件发布,里面的 code 不会编译到最终 exe 里(减小 exe 体积很有帮助)
    0TSH60F7J2rVkg8t
        16
    0TSH60F7J2rVkg8t  
       Jan 18, 2023
    @JustinL
    @vicalloy 我好像觉得我把 debug 的 dcu 和 C++里的 linker 搞混了,哈哈哈,不确定 debug 的 dcu 是不是必须的了。但 release 的 dcu 是必须给的。不给 debug 的 dcu 应该也能编译。
    JustinL
        17
    JustinL  
    OP
       Jan 18, 2023
    @ahhui
    @vicalloy
    目前来看行得通了,十分感谢两位!谢谢!
    eibici
        18
    eibici  
       Jan 19, 2023
    不如痛下决心,重做一个。。。
    JustinL
        19
    JustinL  
    OP
       Jan 19, 2023
    @eibici 长远考虑是打算重做的,但是目前的使用需求也要优先满足……
    aqtata
        20
    aqtata  
       Jan 19, 2023
    楼上都是对的,答案就是 dcu 文件,类似 c++的 obj 文件,没有源码,但是可以链接到工程中编译。
    补充一点细节,dcu 文件和 delphi 版本是绑定的,比如用 xe 开发的 dcu 文件就不能在 xe2 中用了。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5937 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 60ms · UTC 02:12 · PVG 10:12 · LAX 19:12 · JFK 22:12
    ♥ Do have faith in what you're doing.