两个程序 A EXE 
         B Dll
EXE调用DllEXE程序中定义了过程function Sql_Open(sSQL: string; myQuery: TClientDataSet = nil;
                        ShowErrMsg: Boolean = True; FixMsg : string = ''): TClientDataSet;dll中需要回调Sql_Open
=============================================================================================
具体代码如下------com接口中这样写的
unit uUfInFc;{$WARN SYMBOL_PLATFORM OFF}interfaceuses
  Sysutils, ComObj, ActiveX, UfInFc_TLB, StdVcl, Classes, DBClient, Forms;type
  TSql_Open = function (sSQL: string; myQuery: TClientDataSet = nil;
                        ShowErrMsg: Boolean = True; FixMsg : string = ''): TClientDataSet of object;  TTUfInFc = class(TAutoObject, ITUfInFc)
  public
    FSql_Open: TSql_Open;
  protected
    procedure MakeVouCh; safecall;
  end;-------------调用是这样写的
  Try
    FUFInFcCOM := GetActiveOleObject('UFInFc.TUFInFc');
  except
    try
      FUFInFcCOM := CreateOleObject('UFInFc.TUFInFc');
      FUFInFcCOM.FSql_Open:= Sql_Open;
      FUFInFcCOM.MakeVouCh;
    except
      Application.MessageBox('无法获取[email protected]',App_caption,mb_ok+MB_ICONINFORMATION);
    end;
  end;==================问题如下
com接口中如何回调EXE的Sql_Open

解决方案 »

  1.   

    FUFInFcCOM.FSql_Open:= Sql_Open;
    你这里赋值了, 那边就可以调用啊 
      

  2.   


    -----------
    FUFInFcCOM.FSql_Open:= Sql_Open;
    这句提示不有足够的参数
      

  3.   

    你原型定义错了。
    TSql_Open = function (sSQL: string; myQuery: TClientDataSet = nil;
      ShowErrMsg: Boolean = True; FixMsg : string = ''): TClientDataSet of object;of object; 这个是不需要的。
    TSql_Open = function (sSQL: string; myQuery: TClientDataSet = nil;
      ShowErrMsg: Boolean = True; FixMsg : string = ''): TClientDataSet;