1、我不认为有什么缺点,可能总的程序大小大一些。怎样调用都可以,但建议用隐式调用
2、数据放在主程序较好。共享一个TDATABASE没问题,看你有什么目的。
3、可以,可以只定义一个变量指针,然后从主程序接受参数。
粗浅之见,、供参考。

解决方案 »

  1.   

    1、我觉得显示调用好一些,这样比较容易扩充点,比可以轻松实现plugin的功能。
    2、应该共享一个TDatabase,最好另外开一个模块来做这个功能,这样对于将来的修改比较好,也容易。
    3、应该可以的,和wxz说的应该差不多。
    我觉得你在做的时候要考虑一下将来的维护和升级的可能性和方便性。
      

  2.   

    请问两位:   我应该怎样定义一个变量指针,使得DLL中的表单能使用主程序中的数据模块?
      

  3.   

    如果你想把功能模块作近DLL,最好先对功能模块进行封装。
    如:你想把实现SOMEFUNCTION的SOMEFORM做进DLL,那么封装成只输出一个ShowSomeForm的Dll,
    而不要在主程序中使用诸如SomeForm.****的方式。在主程序使用TDataMoudle,功能模块引用主程序的TDataMoudle的方式不太好,比较混乱。应该将TDataMoudle封装成功能模块,供各单元引用。尽量将TDataMoudle封装完善,各单元不需要知道DataBase细节最好。
      

  4.   

    既然是用DELPHI开发,公用模块应放在程序包(BPL)中而不是勉强地放进DLL中。
    涉及数据源的模块放进程序包中,可以直接共享主程序的数据源,程序包可以与主程序共享全局变量。
    只有真正具有独立性的模块才去考虑DLL。
      

  5.   

    nononono:
      我是想将软件分解成多个DLL, 这样当修改子功能时,不必重新发布整个应用软件。
      
      请问一下,这种程序包的开发形式,是否也可以生成多个文件使得程序修改相当方便。
      

  6.   

    whoo:
      请问这样封装DataMoudle ,能否给一个Demo?
      
      

  7.   

    whoo:
      能列举一些好的参考书吗?
      

  8.   

    修改程序包对应用程序的影响与静态连接DLL一样。
      

  9.   

    修改程序包对应用程序的影响与修改静态连接使用的DLL一样。
      

  10.   

    nononono:
        我在看“DELPHI5开发人员指南”中的程序包的概念,看的头晕脑胀;你能给我一些DEMO吗?
      

  11.   

    首先建立一个程序包项目,把你的相关单元加入到这个项目中。然后编辑你的头文件如下:#ifndef HHCOMMBPLH
    #define HHCOMMBPLH
    //---------------------------------------------------------------------------
    #include <db.hpp>
    #include <systdate.h>
    #include <Sysutils.hpp>
    #include <vcl.h>
    #include <windows.h>
    #include <dbtables.HPP>
    #include <db.HPP>
    //---------------------------------------------------------------------------
    #include "UNIT_DATACOPY.h"
    //---------------------------------------------------------------------------extern __declspec(package) void DataCopyTo(TDataSet *DS);
    extern __declspec(package) bool SaveToTXT(TDataSet *tds1, int StrType, AnsiString FileName);
    extern __declspec(package) bool CopyToCrop(TDataSet *tds1,int StrType,TForm *PForm);
    extern __declspec(package) bool SaveToXSL(TDataSet *tds1, bool ToFile, AnsiString FileName);//---------------------------------------------------------------------------
    #endif这个头文件中对函数(以及全局变量)的说明与DLL有点不同:在生成BPL的项目和使用BPL的项目中,对函数的说明是一样的(没有DLL的import和export的区别).在你的CPP文件中包含这个H文件。函数的定义处也要有 __declspec(package) 说明。而且,要在 #pragma package(smart_init) 的下面。编译成BPL BPI后,把BPI拷贝到cb\bin 或 windows\system 下。在你使用这个包的项目的option中,加入这个包。在使用相关函数的文件中包含这个包的H文件。
      

  12.   

    这个头文件是个例子。包与DLL的部分区别:
    1。函数的说明:在生成BPL的项目和使用BPL的项目中,对函数的说明是一样的。
    2。使用:静态连接的DLL要把LIB文件加到项目中。包的使用是在项目的Option中指定。
      

  13.   

    如果你的应用程序中使用了包中Form的定义,还应该包含Form的H文件。