DLL内容:
library calbom;
            
uses
   ShareMem,
   SysUtils,
   DB,
   ComCtrls,
   Classes,
   QDialogs,
   BomDataMoudle in '..\BomDataMoudle.pas' {DataModule1: TDataModule};{$R *.res}Procedure expand(itname:Pchar;bomview:TTreeView);StdCall;
Begin
  //程序中有调用ClientDataset
End;Exports
   expand;begin
end.
调用DLL的程序如下:
unit BOMAdd;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, ComCtrls, ExtCtrls, DBCtrls, Mask, Grids,
  DBGrids,DB;type
  TBom_Add = class(TForm)
    GroupBox1: TGroupBox;
    Label1: TLabel;
    TItem: TEdit;
    SBS1: TSpeedButton;
    SBR1: TSpeedButton;
    Label2: TLabel;
    TDp: TEdit;
    BOMTree: TTreeView;
    procedure SBS1Click(Sender: TObject);
    procedure BOMTreeClick(Sender: TObject);
    procedure BOMTreeDblClick(Sender: TObject);
    procedure SBR1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Bom_Add: TBom_Add;implementationuses BomDataMoudle;
Procedure expand(itname:Pchar;bomview:TTreeView);StdCall; external 'calbom.dll';{$R *.dfm}procedure TBom_Add.SBS1Click(Sender: TObject);
var
 Str:String;
 test:Pchar;
Begin
 With BOMDM.C310 Do
 Begin
   close;
   str:='Select item,part,unit,levels,begins,ends,Scrap From s310 Order by item,part';
   commandtext:=str;
   open;
 End; With BOMDM.C310S Do
 Begin
   close;
   str:='Select part,keys,um,dp,line from s130 Order by part';
   commandtext:=str;
   open;
 End;
  test:=pchar(trim(TItem.text));
  expand(test,BOMTree);
end;

解决方案 »

  1.   


    在工程文件的uses后第一个位置加上sharemem(记住是工程文件)看看能不能解决
    program Project1;uses
      sharemem,
      Forms,
      Unit1 in 'Unit1.pas' {Form1};{$R *.res}begin
      Application.Initialize;
      Application.CreateForm(TForm1, Form1);
      Application.Run;
    end.
      

  2.   

    Procedure expand(itname:Pchar;bomview:TTreeView);StdCall; external 'calbom.dll';这里stdcall要改成safecalldll里面的stdcall也要改成safecall
      

  3.   

    DLL里函数的代码是从我调用程式的位置COPY过去的呀,
    我如果不用DLL的话,将函数里的代码放到调用DLL 的位置是正常的呀
      

  4.   

    我将DLL的函数,改写在调用的程式里变成一个函数,可以调用啊
    怎么办
      

  5.   

    不能用控件作为DLL中函数的参数,
    并在函数中修改这个控件的内容!