DM中用SocketConnection连接,中间层的provide提供的就是一个查询表的语句。
我要把这个DM和一些和这个模块的部分用DLL封装起来。但是出了问题,DM不能CREATE,也不能调用DM里面的过程。
form1有三个控件:
datasource1
table1
dbgrid1DM有三个
socketconnection1
clientDataset1
datasource1
socketconnection1连接的中间层的PROVIDE就是一个表。
所有的连接好了。但是DBGRID1中没有数据。
如果我在FORM1中添加如下一个代码:
with dm.clientdataset1 do
begin
    Close;
    FetchParams;
    Params[0].AsString := '001';
    Open;
end;
就出现DLL的错误。我是用动态调用这个DLL的。请问能不能把SOCKETCONNECTION封装在一个DLL中?

解决方案 »

  1.   

    在界面设计的时候,能看到DBGRID1中的数据的。
      

  2.   

    应该不是,因为我做了一个最简单的例子。
    我用的是DELPHI5。0.如果各位能做个简单的例子,再下感谢啊。。
    [email protected]
      

  3.   

    请问各位有做三层的,通过MIDEAS。然后将一些模块封装成DLL的案例吗?
    这样能实现吗?
    DELPHI6中有一句话:
    CoInitFlags controls the way COM is intialized for threading support. This variable only affects executables (.EXEs), not in-process servers (.DLLs and .OCXs).
    能说明什么问题吗?
      

  4.   

    你的Form1也是和DM一起封装到DLL里面的吗?
      

  5.   

    我做三层是这样的,中间层做成DCOM,中间层公布业务逻辑的接口方法,客户端的代码没有封装,直接用SocketConnection进行连接,并调用中间层的接口方法。
    现在也在改进,封装客户端,但还没时间!
      

  6.   

    对,把FORM也一起封装成DLL。
    就举一个简单例子,把DELPHI自带的DEMO\MIDEAS\EMPEDIT的CLIENG改为DLL的形式。
    然后写一个接口函数,在别的EXE中调用这个DLL,显示这个EMPEDIT的窗口。
      

  7.   

    有没有成功把带MIDEAS的模块封装成DLL的呢?
      

  8.   

    我把DCOMCONNECTION封装到DLL中,但是没有数据。
    例如DM是
    dcomconnection
    datasource
    clientdatasetform上是一个dbgrid,
    连接好后,不运行前,DBGRID有数据。
    但是做成DLL后,由一个EXE调用这个FROM,但是DBGRID中已经没有了数据。
    请问是为什么呢
      

  9.   

    用到COM的话要 USE ActiveX单元
    CoInitialize()
    CoUnInitialize;
      

  10.   

    用ADO的话,CoInitialize()
    CoUnInitialize;
    加了这个,封装成DLL还是可以的。DM是
    dcomconnection
    datasource
    clientdatasetform上是一个dbgrid,server就一个提供者,一个table.然后就封装成DLL,就是不行。也不知道是哪出了问题。