首先看下Delphi單元文件基本結(jié)構(gòu):
unit Unit1; //單元文件名 interface //這是接口關(guān)鍵字,用它來標(biāo)識(shí)文件所調(diào)用的單元文件 uses //程序用到的公共單元 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type //這里定義了程序所用的組件,一些類,以及組件所對(duì)應(yīng)的過程、事件 TForm1 = class(TForm) private //定義私有變量和私有過程 { Private declarations }public //定義公共變量和公共過程 { Public declarations }end; var //定義程序使用的公共變量 Form1: TForm1; implementation //程序代碼實(shí)現(xiàn)部分 {$R *.dfm} end. Delphi單元如下(輸出hello.dll):
unit hellofun;interfacefunction getint():integer;stdcall;function sayhello(var sname:PAnsiChar):PAnsiChar;stdcall;implementationfunction 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;beginend.python中調(diào)用如下:
import ctypesdef 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()運(yùn)行Python,輸出如下:
>>> 888c_char_p(b'ok!')c_char_p(b'hello,garfield !')>>>
好了,我們可以讓python完成部分功能在Delphi中調(diào)用,也可以用Delphi完成部分功能在Python中調(diào)用。
以上程序在DelphiXE2及Python3.2中調(diào)試通過。
總結(jié)
以上就是本文關(guān)于python調(diào)用Delphi寫的Dll代碼示例的全部內(nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!
新聞熱點(diǎn)
疑難解答
圖片精選