python调用Delphi写的Dll

Delphi单元如下(输出hello.dll):

unit hellofun;



interface



function getint():integer;stdcall;

function sayhello(var sname:PAnsiChar):PAnsiChar;stdcall;



implementation



function getint():integer;stdcall;

begin

  result:=888;

end;



function sayhello(var sname:PAnsiChar):PAnsiChar;stdcall;

begin

  sname:='ok!';

  result:='hello,garfield !';

end;





end.
library hello;



{ Important note about DLL memory management: ShareMem must be the

  first unit in your library's USES clause AND your project's (select

  Project-View Source) USES clause if your DLL exports any procedures or

  functions that pass strings as parameters or function results. This

  applies to all strings passed to and from your DLL--even those that

  are nested in records and classes. ShareMem is the interface unit to

  the BORLNDMM.DLL shared memory manager, which must be deployed along

  with your DLL. To avoid using BORLNDMM.DLL, pass string information

  using PChar or ShortString parameters. }



uses

  System.SysUtils,

  System.Classes,

  hellofun in 'hellofun.pas';



{$R *.res}



exports

  getint,

  sayhello;



begin

end.

python中调用如下:

import ctypes





def main():

    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中调用。

 

以上程序在Delphi XE2及Python3.2中调试通过。

 

你可能感兴趣的:(python)