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代码示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!