这两天写了一个Delphi的开发框架,解决了三个方面的问题,有兴趣的同志们可以下来看看(http://http://last_wolf1860.download.csdn.net/)包裹超了20M,所以无法上传。需要看运行效果的人可以Email我([email protected]):
1.分发。针对客户端不同职能,不需要打N个包,只需要指定其配置文件,一个安装包即可以显示相应岗位的主界面。
2.协作。分担各模块的编程人员不再需要顶着主程序的帽子来做调试,带着分发的公用模块即可建立各个模块的application,无须考虑繁琐的登录等等问题,提高了开发效率。
3.美观。我记得当年研究DLL框架集成程序的时候,三方组件的RTTI总是出这样那样的小插曲,而且DLL框架貌似省事省心,但继承、界面内部的微控制全部与独立的EXE程序不同,最让俺接受不了的是界面的美观和资源的复用。现在这些问题Pass掉了。框架采用的Ribbon风格,主程序仅带了一种皮肤,开发时主程序自动合并各模块窗体的菜单工具条,完全避免了主窗体设计工具,模块窗体是Dock还是MDI的问题。
  至于重用维护等等的概念就不再提了,这属于开发框架最基础也是必须有的东西。  解决问题的同时,又发现了新的问题,希求各位达人先贤不吝赐教。
问题一:程序发布。既然做为插件来开发,就需要有插件框架的觉悟,程序发布的时候要尽可能地考虑到插件的发展方向。那就意味着要把自己本机上的运行期包(计三四百个)全部一并发行了?如果不一并发行,就来在扩展插件的时候,是不是就得连同用到的运行期包一起带上?或者还有别的答案?
问题二:插件的开发问题。所有插件依赖的东西,三方组件、公用单元需要一并赋予协作者,那就意味着协作开发插件的人要同样搭建跟框架开发一模一样的环境?如果不是,那应该怎么协作?
问题三:BPL包是不是可以合并?如果可以应该如何去做?比如我用的Dev的套件,那就得把各个运行期的包全部加到自己的包里?Delphi自己的运行期包也有同样的问题。   VS2008也提供了自己的动态链接库包(类库),一哥们让我一并写一个C#的此类框架,顺便了解了一下Winform程序的机制,发现似乎与BPL的程序发布是一个路子。
  1..net Framework把VS的运行期包全部打在里面了,所以发布时只需要带上三方组件的DLL即可。Delphi没有frameWork,就只能靠着人工一个一个去找了。
  2..net 的Dll是不是也不能包含重复的类?如果这样,那就简直和BPL一模一样了。

解决方案 »

  1.   

    牛人!CSDN不能上傳超過20M的文件嗎?
      

  2.   

    问题一:只发布插件依赖的Dll或者BPL,通过资源查看工具可以看到导入的DLL.
    问题二:既然是BPL,肯定是带包编译的,三方组件和公共单元做成BPL,只要发布BPL给协作者即可.
    问题三:BPL不能合并,DCP可以合并,合并后好像可以重编译.具体没有操作过.
      

  3.   

    感谢xthmpro_cn。
    DCP的合并能否详细解说一下?
      

  4.   

    一年前的帖子啊我合并是把所有的unit放到contains中。
    编译后,这个包就很大,但是比所有的bpl加到一起要小很多。只需发布这一个包就成。Package OTSVCL;
    {$R *.res}
    {$ALIGN 8}
    {$ASSERTIONS ON}
    {$BOOLEVAL OFF}
    {$DEBUGINFO ON}
    {$EXTENDEDSYNTAX ON}
    {$IMPORTEDDATA ON}
    {$IOCHECKS ON}
    {$LOCALSYMBOLS ON}
    {$LONGSTRINGS ON}
    {$OPENSTRINGS ON}
    {$OPTIMIZATION ON}
    {$OVERFLOWCHECKS OFF}
    {$RANGECHECKS OFF}
    {$REFERENCEINFO ON}
    {$SAFEDIVIDE OFF}
    {$STACKFRAMES OFF}
    {$DESCRIPTION 'OTSVCL'}
    {$TYPEDADDRESS OFF}
    {$VARSTRINGCHECKS ON}
    {$WRITEABLECONST OFF}
    {$MINENUMSIZE 1}
    {$IMAGEBASE $400000}
    {$IMPLICITBUILD ON}Contains
     SysUtils,
     ExcUtils,
     SysConst,
     Character,
     Types,
     RTLConsts,
     SHFolder,
     ImageHlp,
     Classes,
     TypInfo,
     Variants,
     VarUtils,
     ActiveX,
     TimeSpan,
     Math,
     StrUtils,
     DateUtils,
     Generics.Defaults,
     Generics.Collections,
     SyncObjs,
     Diagnostics,
     AnsiStrings,
     ObjAuto,
     WideStrUtils,
     Contnrs,
     ComObj,
     ComConst,
     WideStrings,
     MaskUtils,
     Registry,
     IniFiles,
     IOUtils,
     Masks,
     UxTheme,
     Wincodec,
     ZLib,
     HelpIntfs,
     MultiMon,
     FlatSB,
     Rtti,
     msxml,
     Mapi,
     oleacc,
     StdVCL,
     COMAdmin,
     ScktComp,
     jpeg,
     JConsts,
     Menus,
     Themes,
     Controls,
     Forms,
     StdActns,
     ComCtrls,
     ComStrs,
     Consts,
     Printers,
     Graphics,
     ActnList,
     ImgList,
     GraphUtil,
     ListActns,
     StdCtrls,
     ExtCtrls,
     Dialogs,
     ToolWin,
     Clipbrd,
     Grids,
     Mask,
     Buttons,
     ExtActns,
     ExtDlgs,
     ButtonGroup,
     CategoryButtons,
     ValEdit,
     CmAdmCtl,
     OleCtrls,
     OleConst,
     AxCtrls,
     OleServer,
     OleCtnrs,
     AppEvnts,
     DockTabSet,
     CaptionedDockTree,
     Tabs,
     xmldom,
     msxmldom,
     XMLConst,
     ActnPopup,
     PlatformDefaultStyleActnCtrls,
     ThemedActnCtrls,
     ShadowWnd,
     ActnColorMaps,
     ActnMan,
     ActnCtrls,
     ActnMenus,
     ABAccessibility,
     StdActnMenus,
     XPActnCtrls,
     CustomizeDlg,
     ColorGrd,
     MPlayer,
     Outline,
     FileCtrl,
     TabNotBk,
     DdeMan,
     CheckLst,
     Provider,
     DataBkr,
     MidConst,
     Midas,
     DSIntf,
     DBClient,
     DBCGrids,
     VDBConsts,
     DBGrids,
     DBCtrls,
     DBPWDlg,
     DBLogDlg,
     DBCommonTypes,
     SqlTimSt,
     DBConsts,
     FMTBcd,
     DBCommon,
     DB,
     DBByteBuffer,
     DBPlatform,
     xmlutil,
     Xmlxform,
     Calendar,
     DirOutln,
     Spin,
     BDE,
     SMINTF,
     bdeconst,
     DBTables,
     MConnect,
     SConnect,
     IdBuffer,
     IdResourceStringsCore,
     IdIOHandler,
     IdIntercept,
     IdExceptionCore,
     IdTCPConnection,
     IdReplyRFC,
     IdReply,
     IdSocketHandle,
     IdIOHandlerStack,
     IdCustomTransparentProxy,
     IdIOHandlerSocket,
     IdSocks,
     IdTCPClient,
     IdIPAddress,
     IdAssignedNumbers,
     IdStreamVCL,
     IdGlobal,
     IdStream,
     IdResourceStrings,
     IdException,
     IdStack,
     IdStackWindows,
     IdWship6,
     IdWinsock2,
     IdStackConsts,
     IdStackBSDBase,
     IdBaseComponent,
     IdComponent,
     IdAntiFreezeBase,
     IdCTypes,
     IdSSLOpenSSLHeaders,
     IdResourceStringsProtocols,
     IdGlobalProtocols,
     IdCharsets,
     IdFIPS,
     SqlExpr,
     DBConnAdmin,
     SqlConst,
     DBXDynalinkNative,
     DBXCommonResStrs,
     DBXDynalink,
     ClassRegistry,
     DBXPlatform,
     DBXCommon,
     DSUtil,
     DBXJSON,
     DBXReaderTableStorage,
     DBXCommonTable,
     DBXJSONCommon,
     DBXDelegate,
     DBXMetaDataCommand,
     DBXMetaDataReader,
     DBXMetaDataProvider,
     DBXTableFactory,
     DBXDBReaders,
     DBXMetaDataNames,
     DBXTypedTableStorage,
     DBXMetaDataWriter,
     DBXMetaDataUtil,
     DBXMetaDataError,
     DBXSqlScanner,
     DBXMetaDataCommandFactory,
     DBXJSONReflect,
     DBXMetaDataWriterFactory,
     DBXClientResStrs,
     DBXMetadataCommon,
     DBXMessageHandlerJSonCommon,
     DBXStreamer,
     DBXClient,
     DSNames,
     DBXMessageHandlerCommon,
     DBXStream,
     DBXTransport,
     DBXEncryption,
     DBXTransportFilter,
     DbxSocketChannelNative,
     DBXRSAFilter,
     DBXOpenSSL,
     DBXOpenSSLRes,
     DBXStreamPlatform,
     DBXMessageHandlerJSonClient,
     DbxDatasnap,
     SimpleDS,
     DBXMsSqlMetaDataReader,
     DBXMsSqlMetaDataWriter,
     DbxMsSql,
     DBXMsSqlMetaData,
     DBXMsSqlReadOnlyMetaData;End.
    我见有的人是requies中加入包,但是还要发布那些原来的包。
      

  5.   

    哈,这个帖子还有复:)
    我的做法是把所有的涉及的包都打在一起了,200+M,跟.net的框架大小差不多。
    楼上的做法,包太大的话,动态加载速度受影响哦。静态链接应该会好不少,但那样框架的作用就弱多了