各位好,以前开发软件都是代码全部开放的,但这样容易造成核心代码泄露,现在我不想让团队中的其他人看到这些代码,应该怎么办?
因为我的整个软件都是在几个模板窗体上继承下来的,而代码都是写在模板窗体的pas里,如果不发布pas,那么从模板继承下来的窗体在IDE中都不能打开了。所以,我想,如果只发布dfm和dcu就能在IDE中打开窗体就好了,这样有方法做到吗?
因为我的整个软件都是在几个模板窗体上继承下来的,而代码都是写在模板窗体的pas里,如果不发布pas,那么从模板继承下来的窗体在IDE中都不能打开了。所以,我想,如果只发布dfm和dcu就能在IDE中打开窗体就好了,这样有方法做到吗?
第二,提供dcu文件,可以编译,看不到代码
如果只提供dcu和dfm,就打不开界面了,我现在就卡在这里了
假如整份软件的核心代码都在基窗体内, 可以很明白的说, 就算拿了里面的整份代码, 也很难在外面搞起来的. 因为你的核心代码, 百分百的跟你现有业务是紧密偶合起来, 分不开的. 换句话说, 拿出去不进行大量修改是不能够用来做其他软件的.
而设计思路, 就算你隐藏了代码, 聪明点的人自然一眼就看出来的了, 隐藏不了的.
打开Delphi菜单“Component”-“Install packages”,在“Runtime packages”选项,
勾选上“Build with runtime packages”,加入你的包名称。4) 发布时,需提供该bpl文件给用户,可一起放在可执行文件目录下。
另外为了开发协作方便,建议最好:
1) 把窗体单元中的业务逻辑代码分离,
把这些代码单独到另外一个package中,不开放代码。2) 把无关要紧的窗体单元和一些界面处理代码,放在一个package中,
包括代码文件,开放给底下的开发人员。3) 把需要继承的窗体单元,加入到Delphi的开发环境中,以便直接能在工程中创建子类。
(放在另外的包中,在“Add New Form”时没办法像同一个工程中那样方便添加继承窗口)。需要做的事情是修改下Delphi的ObjRepos文件,
如果是Delphi7或早点版本,这个文件是bin目录下的delphi32.dro,
如果是Delphi2007或之后版本,这个文件是
$(BDS)\ObjRepos\BorlandStudioRepository.xml
或
$(BDS)\ObjRepos\RADStudioRepository.xml
说老实话,这个框架没有跟业务紧密结合(但是面向管理系统方面的),此框架就是另一个系统的,移植到这个软件上面就很快完成了。核心代码分离我也试了,需要改动的地方比较多,主要是参数传递方面的,不是太好的方法,如果能直接脱离pas或者加密起来最好了,但我没实现,所以来问问,如果实在没办法只有采用分离的方法了。
核心代码写到一个独立的abc.pas中,你的源码uses引用该pas,最简单。然后编译,得到abc.dcu,然后发布除了abc.pas以外的你的所有文件。
这样解决了工程中打开窗体时报到不到pas文件的错误。
别用DLL的方法,不方便。
1、按照常规开发出需要pas(假定这个pas的名字为test.pas)及dfm(test.dfm),并生成test.dcu
2、复制test.pas,创建其副本(假定此副本的名字为copy.pas),将copy.pas里面的自己写的procedure及function都删掉,将窗体、控件对应的procedure保留(这些procedure必须保留,否则会报错的),但可以注释掉里面代码,最后只留空壳就行了
例如:本来的button1的事件如下:
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(DateTimeToStr(Now));
end;
可以处理成这样:
procedure TForm1.Button1Click(Sender: TObject);
begin
//
end;
注意:这个begin end里面一定要有“//”,否则如果这个事件里没有任何代码就会被编译器自动处理掉
3、把test.dcu设为只读,把test.pas移到其他文件夹,把copy.pas放到原来test.pas的文件夹下,并将copy.pas重命名为test.pas
4、在编译器的编译前及编译后事件(这些事件是delphi2007及其以后版本才支持的)中添加批处理命令,编译前及编译后事件的位置可从此处找到:
主菜单-->project-->options-->build Events,
在pre-build中写如下代码:if exist test.pas ren test.pas test.@pas
在post-build中写如下代码:
if exist test.@pas ren test.@pas test.pas
注:这样做的目的是为了避免编译器在编译时重新生成test.dcu,故在编译前将此文件改名,编译后再改回来,这样达到了既不重新生成test.dcu,又在IDE中打开test窗体时不报错的目的。
5、好了,现在可以发布test.dcu,test.dfm及空壳的test.pas了,因为编译前及编译后事件是写在项目的.dproj文件中的,所以还要发布.dproj文件,为了避免出问题,最好在发布时将这些文件置为“只读”文件。
--by阿木