dll中的代碼如下:
//***********************************************
procedure  cj_treeshow(tv1:TTreeView);stdcall;
var
 sp1node:TTreenode;
begin
  sp1node:=tv1.Items.Add(nil,'信息');
end;exports
  cj_treeshow;
begin
end.
//***********************************************
  在窗體BM_cjset中調用:  打開BM_cjset代碼:
  BM_cjset_frm:=TBM_cjset_frm.Create(Application);
  BM_cjset_frm.ShowModal;
  FreeandNIl(BM_cjset_frm);
BM_cjset中的代碼如下:
//***********************************************implementation
procedure  cj_treeshow(tv1:TTreeView);stdcall;external 'dll\sqlodbc.dll';{$R *.dfm}procedure TBM_cjset_frm.FormShow(Sender: TObject);
var
  i:integer;
begin
  cj_treeshow(TreeView1);
end;
//***********************************************
可以正常調用,但關閉時提示‘Invalid pointer operation’
怎麼回事啊?

解决方案 »

  1.   

    我傳遞句柄了,好像也不行,代碼如下:
    dll中的代碼如下: 
    //*********************************************** 
    function cj_treeshow(AppHandle:THandle;var tv1:TTreeView;var adoqr_cj:TADOQuery):Boolean;stdcall;
    var
      sp1node:TTreenode;
    begin
      Application.Handle:=AppHandle;
      sp1node:=tv1.Items.Add(nil,'信息'); 
      cj_treeshow:=true;
    end; exports 
        cj_treeshow; 
    begin 
    end. 
    //*********************************************** 
        在窗體BM_cjset中調用:     打開BM_cjset代碼: 
        BM_cjset_frm:=TBM_cjset_frm.Create(Application); 
        BM_cjset_frm.ShowModal; 
        FreeandNIl(BM_cjset_frm); 
    BM_cjset中的代碼如下: 
    //*********************************************** implementation 
    function cj_treeshow(AppHandle:THandle;var tv1:TTreeView;var adoqr_cj:TADOQuery):Boolean;stdcall;external 'dll\sqlodbc.dll'; {$R   *.dfm} procedure   TBM_cjset_frm.FormShow(Sender:   TObject); 
    var 
        i:integer; 
    begin 
        cj_treeshow(application.handle,TreeView1,adoqr_cj); 
    end; 
    //*********************************************** 
      

  2.   

    tv1:TTreeView;var   adoqr_cj:TADOQuery
    这样传递参数只能带包运行,
      

  3.   

    在DLL中先加上这句:CoInitialize(nil);记住要 uses ActiveX