大佬教程收集整理的这篇文章主要介绍了delphi – 在主机应用程序和DLL之间传递包含方法的记录,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
让我们假设为了简单起见我们的Record类型不包含任何String字段(因为这当然需要Sharemem DLL),这里是一个例子:
@H_696_4@TMyRecord = record Field1: Integer; Field2: Double; function DoSomething(AValue1: Integer; AValue2: DoublE): Boolean; end;@H_674_5@因此,简单地说明一下:我可以在主机应用程序和DLL(在任一方向)之间传递TMyRecord的“实例”,而无需使用运行时包或共享内存DLL,并从主机EXE执行DoSomething功能和DLL?
testdll.dll
@H_696_4@library TestDll; uses SysUtils,Classes,uCommon in 'uCommon.pas'; {$R *.res} procedure TakeMyFancyRecord(AMyFancyRecord: PMyFancyRecord); stdcall; begin AMyFancyRecord^.DoSomething; end; exports TakeMyFancyRecord name 'TakeMyFancyRecord'; begin end.@H_674_5@uCommon.pas< - 由应用程序和dll使用,用于定义您的花哨记录的单位
@H_696_4@unit uCommon; interface type PMyFancyRecord = ^TMyFancyRecord; TMyFancyRecord = record Field1: Integer; Field2: Double; procedure DoSomething; end; implementation uses Dialogs; { TMyFancyRecord } procedure TMyFancyRecord.DoSomething; begin ShowmessageFmt( 'Field1: %d'#$D#$A'Field2: %f',[ Field1,Field2 ] ); end; end.@H_674_5@最后一个测试应用程序,文件 – >新的 – > vcl表单应用程序,在表单上放一个按钮,在uses子句中包含uCommon.pas,添加对外部方法的引用
@H_696_4@procedure TakeMyFancyRecord(AMyFancyRecord: PMyFancyRecord); stdcall; external 'testdll.dll' name 'TakeMyFancyRecord';@H_674_5@并在按钮的点击事件中添加
@H_696_4@procedure TForm1.button1Click(Sender: TObject); var LMyFancyRecord: TMyFancyRecord; begin LMyFancyRecord.Field1 := 2012; LMyFancyRecord.Field2 := Pi; TakeMyFancyRecord( @LMyFancyRecord ); end;@H_674_5@免责声明:
>在D2010工作;
>在我的机器上编译!
请享用!
大卫赫弗南的编辑
为了100%清除,执行的DoSomething方法是DLL中定义的方法. EXE中定义的DoSomething方法永远不会在此代码中执行.
以上是大佬教程为你收集整理的delphi – 在主机应用程序和DLL之间传递包含方法的记录全部内容,希望文章能够帮你解决delphi – 在主机应用程序和DLL之间传递包含方法的记录所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。