我写的Dll代码,其中的FDataServerObj有一个onDataPack事件,如何在Dll中引出FDataServerObj的onDataPack事件到主程序.
library DataServer;
uses
  SysUtils,
  Classes,
  System,
  DataServerObj;type
  TDataPackReceive = procedure(p_DataPackHex: pchar; p_Data: pchar; p_DataLen: integer); //数据包事件
  TStateEvent = procedure(p_State: integer; p_StateDesc: pchar); //状态事件var
  FDataServerObj: TDataServerObj;procedure datapack();
beginend;
function DataServerInit(p_CommNum: integer): Boolean; stdcall
begin
  result := false;
  try
    FDataServerObj := TDataServerObj.Create(nil);
    //FDataServerObj.onDataPack := datapack;
    FDataServerObj.CommStart(p_CommNum);    result := true;  except  end;
end;{$R *.res}
exports DataServerInit;
begin
end.
==================================================
DataServerOjb组件代码
unit DataServerObj;interfaceuses
  SysUtils, Classes, MSCommLib_TLB,DataProceThread,ExtCtrls;type
  TonDataPackEvent = procedure(SAddress:Integer;DataPackHex: pchar; DataPackLen: integer) of object; stdcall;  TDataServerObj = class(TComponent)
  private
  protected
    { Protected declarations }
  public
    { Public declarations }
    constructor Create(Owner: TComponent); override;
    destructor Destroy; override;  published
    { Published declarations }
    property onDataPack: TonDataPackEvent write SetonDataPack;
  end;
implementation
{ TDataServerObj }
constructor TDataServerObj.Create(Owner: TComponent);
begin
  inherited;
  
end;destructor TDataServerObj.Destroy;
begin
  FDataProc.Free;  inherited;
end;end.

解决方案 »

  1.   

    改成BPL吧,这样只要在主程序中uses这个单元就可以使用了
      

  2.   

    做成DLL是为了做硬件开发接口.所以不能用BPL.我也知道用回调函数可以实现这个功能,可问题是我不明白怎么用回调函数来实现,网上倒是能搜出一大堆关于回调函数的内容可越看越不明白怎么用,还请高人们能直接给个指导,最好能给几段示例代码,忠心感谢!
      

  3.   

    function DataServerInit(p_CommNum: integer; datapac: TonDataPackEvent): Boolean; stdcall;
    begin
      result := false;
      try
      FDataServerObj := TDataServerObj.Create(nil);
      FDataServerObj.onDataPack := datapack;  FDataServerObj.CommStart(p_CommNum);  result := true;  except  end;
    end;
      

  4.   

    将DLL的接口做好了,在EXE中直接调用即可