请问 dll是否可以接受 vcl作为参数??
请看下面代码procedure ShowMe(Ahand:Thandle;ADataSet:DataSet);
var
  Aform: Tform1;
begin
  application.handle:=Ahand;
  AForm:= TForm1.create(Application);
  try
    AForm.datasource.dataset:=ADataset;
    AForm.showmodule;
  finally
    Aform.free;
  end;
end;exports 
  ShowMe;Form1 内有一个Datasource 并于 DbGrid关联
为什么我点击dbgrid内的数据库的记录就提示错误!!

解决方案 »

  1.   

    先将
    >>procedure ShowMe(Ahand:Thandle;ADataSet:DataSet);
    改为
    procedure ShowMe(Ahand:Thandle;ADataSet:TDataSet);
    再试试看,还有,错误提示什么?
      

  2.   

    如果是Delphi程序之间调用dll,可以接收控件做为参数的。
    记得是这样,我以前做过。
      

  3.   

    procedure ShowMe(Ahand:Thandle;ADataSet:DataSet)
    这句话是我在写贴子的时候写错了。错误是 我在点击dbgrid后 字段对应的值变成了乱码
    提示
      address vioation at address 00401d44 in module "porject1.exe"
      write of address 0000004
    后又提示
      address vioation at address 00401d44 in module "porject1.exe"
      write of address 745C5453
    又提示
      address vioation at address 00401d42 in module "porject1.exe"
      write of address 745C5453
    提示N便后 我从进程中关闭http://www.nuoya.com.cn/wslm/download/temp.exe
    下载原代码 谢谢了
      

  4.   

    在程序和Dll间传递一般控件没有问题,但传递DataSet恐怕不行,也不是不能传递DataSet,而是数据传递不过来。
      

  5.   

    补充:因为DataSet的数据存放在程序的缓冲区中,而Dll无法共享这个缓冲区。
      

  6.   

    Frfind.pas
    改:
    procedure ShowMe(Ahand:Thandle;ADataSet:TDataSet);Stdcall;
      

  7.   

    请问 哪怎样办才能结局这样的问题呢
    我是想让传一个数据库表过来就进 因为这个模块 是要对一个表进行操作
    而这个表可能是 db 也可能是 mdb中的一表 所以我想用DataSet
      

  8.   

    用olevariant变量传递吧,用clientdataset.data这个值,或者是DataSetProvider.data传递给olevariant变量,接收到变量后再把olevariant变量赋值给clientdataset.data,这样就可以得到一个dataset了。