我的DLL有两个入口函数,如下:
用这个入口函数可以把参数传过来
function ShowReportForm_old(hHandle:THANdle;ACaption:string;lstReportObj:TReportObjectListClass):Tform;stdcall;
下面的不可以:
ShowReportForm_new(App:TApplication;ACaption:string;lstReportObj:TReportObjectListClass):Tform;
请问这是什么原因???
APPLICATION 和APPLICATION.handle的区别是????

解决方案 »

  1.   

    一个是类,一个是句柄当然不一样了。再说你的第二个函数也没有定义调用方式啊!是stdcall,还是cdecl还是别的,不一样的。
      

  2.   

    APPLICATION 和APPLICATION.handle的区别是????你跟你的名字的區別是????你擁有你的名字
    你的名字代表你
      

  3.   

    1、首先不说你的开发的接口函数问题,你的接口声明是有很不合理的地方,虽然在Delphi中你是可以调用的,但是不科学,TApplication是Delphi自己,TForm也是Delphi自己的,最好在业务接口中生成Form,并Show出来。其他的也是如此
    2、TApplication和TApplication.Handle本质是一样的,只是表现的形式不一样一个是对象,一个是句柄,所以按理说是没有问题的,在DLL中你需要将TApplication的对象或Applcaition.Handle赋值到DLL的Application的相关信息
    如:
    DLL:
    var
      DLLApp: TApplication;
    procedure DLLProc(App: TApplication; ....); stdcall;
    begin
      Application := App;
    ....
    end;//出口函数定义
    procedure DllUnLoadProc(Reason: Integer); register;
    begin
      if Reason = DLL_PROCESS_DETACH then
      begin
        Application := pDllApplication;
        Screen := pDllScreen;
      end;
    end;//DLL出口
    begin
      pDllApplication := Application;
      pDllScreen := Screen;
      DllProc := @DLLUnloadProc;
    end.
      

  4.   

    不好意思,刚学忘了加stdcall;