DLL调用弹出这个提示:
  cannot assign a tfont to a tfontDLL:
var
  DLLApp: TApplication;
  DLLScr: TScreen;//建立一个DLL窗体,传入应用和桌面和其它参数,返回一个窗体对象
function CreateBuyForm(App: TApplication; Scr: TScreen;var DataMdl: TfrmDataModule):TForm;stdcall;
begin
  Application := App;//将DLL的应用和桌面用主调程序的代替.
  Screen := Scr;  frmDataModule:= DataMdl;
  Application.CreateForm(TfrmBuy, frmBuy);//这里出错
  //建立窗体,可以是普通窗体
  result:=frmBuy;
end;//释放DLL资源
procedure ExitDLL(Reason: Integer);
begin
  if Reason = DLL_PROCESS_DETACH then
  begin
    Application := DLLApp;
    Screen := DLLScr;
  end;
end;//发布为处部函数
exports
  CreateBuyForm;begin
  DLLApp := Application;
  DLLScr := Screen;  DLLProc := @ExitDLL;
end.

解决方案 »

  1.   

    //建立一个DLL窗体,传入应用和桌面和其它参数,返回一个窗体对象
    function CreateBuyForm(App: TApplication; Scr: TScreen;var DataMdl: TfrmDataModule):TForm;stdcall;
    begin
      Application := App;//将DLL的应用和桌面用主调程序的代替.
      Screen := Scr;  frmDataModule:= DataMdl;
      //**Application.CreateForm(TfrmBuy, frmBuy);//这里出错
      //建立窗体,可以是普通窗体
      //**result:=frmBuy;
      Result := TfrmBuy.Create(nil);
    end;
      

  2.   

    回了贴知道有点问题:
    function CreateBuyForm(App: TApplication; Scr: TScreen;var DataMdl: TfrmDataModule):TForm;stdcall;
    begin
      Application := App;//将DLL的应用和桌面用主调程序的代替.
      Screen := Scr;  frmDataModule:= DataMdl;
      //**Application.CreateForm(TfrmBuy, frmBuy);//这里出错
      frmBuy := TfrmBuy.Create(nil);
      //建立窗体,可以是普通窗体
      result:=frmBuy;
    end;
      

  3.   


    是不是说用 包+DLL来分发呢?
    具体做能讲讲吗?
      

  4.   

    function CreateBuyForm(App: TApplication; Scr: TScreen;var DataMdl: TfrmDataModule):TForm;stdcall;  
    begin  
      Application := App;//将DLL的应用和桌面用主调程序的代替.  
      ///**Screen := Scr;  能不能不传???  frmDataModule:= DataMdl;  
      //**Application.CreateForm(TfrmBuy, frmBuy);//这里出错  
      frmBuy := TfrmBuy.Create(nil);  
      //建立窗体,可以是普通窗体  
      result:=frmBuy;  
    end;