python调用Delphi写的Dll代码示例
首先看下Delphi单元文件基本结构:
unitUnit1;//单元文件名 interface//这是接口关键字,用它来标识文件所调用的单元文件 uses//程序用到的公共单元 Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,Dialogs; type//这里定义了程序所用的组件,一些类,以及组件所对应的过程、事件 TForm1=class(TForm) private//定义私有变量和私有过程 {Privatedeclarations} public//定义公共变量和公共过程 {Publicdeclarations} end; var//定义程序使用的公共变量 Form1:TForm1; implementation//程序代码实现部分 {$R*.dfm} end.
Delphi单元如下(输出hello.dll):
unithellofun; interface functiongetint():integer;stdcall; functionsayhello(varsname:PAnsiChar):PAnsiChar;stdcall; implementation functiongetint():integer;stdcall; begin result:=888; end; functionsayhello(varsname:PAnsiChar):PAnsiChar;stdcall; begin sname:='ok!'; result:='hello,garfield!'; end; end.
libraryhello; {ImportantnoteaboutDLLmemorymanagement:ShareMemmustbethe firstunitinyourlibrary'sUSESclauseANDyourproject's(select Project-ViewSource)USESclauseifyourDLLexportsanyproceduresor functionsthatpassstringsasparametersorfunctionresults.This appliestoallstringspassedtoandfromyourDLL--eventhosethat arenestedinrecordsandclasses.ShareMemistheinterfaceunitto theBORLNDMM.DLLsharedmemorymanager,whichmustbedeployedalong withyourDLL.ToavoidusingBORLNDMM.DLL,passstringinformation usingPCharorShortStringparameters.} uses System.SysUtils, System.Classes, hellofunin'hellofun.pas'; {$R*.res} exports getint, sayhello; begin end.
python中调用如下:
importctypes defmain(): dll=ctypes.windll.LoadLibrary("hello.dll") ri=dll.getint() print(ri) s=ctypes.c_char_p() rs=ctypes.c_char_p() rs=dll.sayhello(ctypes.byref(s)) print(s) print(ctypes.c_char_p(rs)) if__name__=='__main__': main()
运行Python,输出如下:
>>> 888 c_char_p(b'ok!') c_char_p(b'hello,garfield!') >>>
好了,我们可以让python完成部分功能在Delphi中调用,也可以用Delphi完成部分功能在Python中调用。
以上程序在DelphiXE2及Python3.2中调试通过。
总结
以上就是本文关于python调用Delphi写的Dll代码示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!