Delphi DLL和Delphi EXE之间的回调功能
发布时间:2020-12-15 04:13:50 所属栏目:大数据 来源:网络整理
导读:我正在写一个Delphi DLL.在Delphi DLL中我想实现一个回调函数,这个回调函数应该调用回调用Delphi程序.回调函数的主要目的是在DLL中发生某些长操作,但是在调用者Delphi程序中应该进行进度报告(通过进度条)和操作取消. 我想得到一些支持如何正确实现DLL中的回
我正在写一个Delphi DLL.在Delphi DLL中我想实现一个回调函数,这个回调函数应该调用回调用Delphi程序.回调函数的主要目的是在DLL中发生某些长操作,但是在调用者Delphi程序中应该进行进度报告(通过进度条)和操作取消.
我想得到一些支持如何正确实现DLL中的回调函数.我可以继续,直到分配从EXE传递的回调函数,但我知道如何从DLL本身启动调用. 这是定义部分(由EXE和DLL使用): uses Windows; Type PTCallBackStruct = ^TCallBackStruct; TCallBackStruct = packed record Handle: THandle; Caller: Pointer; FileSize: LongInt; end; type TFunctionPointerType = function(ZCallbackRec: PTCallBackStruct): Longbool; stdcall; type PTDLLParamaters = ^TDLLParamaters; TDLLParamaters = packed record Handle: THandle; Caller: Pointer; CallbackFunction: TFunctionPointerType; end; var DLLCallback: TFunctionPointerType; EXE文件: uses .... type function DLL_Callback(ZCallBackRec: PTCallBackStruct): LongBool; stdcall; forward; implementation function DLL_Callback(ZCallBackRec: PTCallBackStruct): LongBool; stdcall; begin // progress reporting this function should be called back from //the DLL. The Handle and Self parameter should help with identifying // which object initiated the callback end; 通过PTDLLParameters从Delphi exe传递给DLL如下: // init callback DLLParameters := AllocMem(SizeOf(TDLLParamaters)); with DLLParameters^ do begin Handle := Application.Handle; Caller := Self; CallbackFunction:= DLL_Callback; end; 加载DLL ..... ..... 调用DLL CompressionCreateLibrary(DLLParameters); .... 某些操作 Free DLL .... ..... FreeMem(DLLParameters); DLL文件: 应该从DLL的某个部分调用此函数,使进度回到EXE关于实际操作: function CallCallBackFromDLL(Size: integer): Integer; begin // .... set up callbackstruct .... // calling back DLLCallback(CallbackStruct); end; 我认为这部分应该没问题: // main init call assigning the callback function to the DLL function CompressionCreateLibrary(DLLParametersID: PTDLLParamaters): Integer; begin DLLParametersID.CallbackFunction:= @DLLCallback; end; 请帮我解释如何在DLL中正确实现回调部分.一些示例代码将不胜感激.虽然debuging初始化工作正常,但是回调失败了.先感谢您. 解决方法
你的作业陈述是落后的.在DLL函数中,DLLParametersID保存有关回调的信息,但随后用全局变量覆盖它:
DLLParametersID.CallbackFunction:= @DLLCallback; 交换那些以分配DLLCallback. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |