请教!有熟悉Python的吗?Python如何调用DLL? 找了一些资料,基本上都是需要针对Python的特性在编写DLL时在源代码级就需要做特别的处理,然后再由Python来调用。另外Python通过 ctypes 来调用DLL,是不是那些被调用的DLL本身就需要是 ctypes 支持的才可以? 不知道Python是不是可以支持象“综合交易平台”接口资料里的那些DLL?如果可以如何操作?有借鉴的资料吗?或者最好有一个简单的范例供参考! 谢谢
ctypes? http://docs.python.org/library/ctypes.html calldll? http://www.nightmare.com/~rushing/dynwin/ http://www.91linux.com/html/article/program/python/20070714/4664.html 希望有经验的人帮忙指点一下。目的是想看看Python能不能调用(或者如何调用)这个“综合交易平台”里提供的那些DLL。
不是要包装好的Python包装CTP的dll,而是看看是不是可以实现,或者如何实现? 如果可行,我就打算搞,有个简单的范例或资料参考就行了。 就是想不安装c/c++和C#这些编译平台,打算只使用Python。
如果DLL是C語言開發的,導出函數符合stdcall調用約定,那用ctypes調用應該沒問題,這和python直接調用Windows的Win32 API DLL約定一樣的。 如果DLL是C++語言開發的,那可能就要在DLL源代碼里進行包裝了,亦就是開發python擴展模塊。
SWIG是一个能将C或者C++编写的程序与其它各种高级语言如Perl, Python, Ruby, 和 Tcl进行联接的开发工具。其原理是从C/C++头文件中找到申明并利用他们生成脚本语言访问C/C++代码所必须的封装代码。SWIG具有高度可自定义的特点,它能帮助你生成适合你的应用程序的封装包。 -------------------------------------------- 说的是从头文件中找到声明生成脚本语言的封装代码。
奥,谢谢,我再研究一下,好像还是需要用到c/c++编译器。 http://blog.csdn.net/panbinfeng/archive/2006/04/14/662563.aspx http://blog.jibin.net/post/23/
http://devbbs.doit.com.cn/viewthread.php?tid=7004 感觉这样反而复杂了,不如直接用提供dll对应的语言工具来开发处理了,本来想偷懒看来是不行了。 http://hi.baidu.com/125725385/blog/item/8811a511d3cbae07213f2e97.html 看来是要放弃打算用Python调用“综合交易平台”的dll的想法了。
python用swig调dll是个伪命题 文章出处:飞诺网(http://www.diybl.com/course/3_program/c++/cppjs/200847/108568.html) 以前以为通过swig可以在python里直接调dll,实现c++中loadlibrary一样的功能。但是实际上如果你有一个非自己编的dll的话你是无法通过swig来调用的。比如调windows的系统dll。 只有自己写的代码生成的dll才可以通过swig来调,而且实际上调的也不是dll,而是.pyd文件。也就是说用生成dll的代码通过.i和_swap.cxx文件一起生成一个.pyd文件,python在调用c++的函数的时候实际是链接的.pyd。没有这个文件是不能成功调dll的。 swig实际是调用c代码的,想调dll的人,要不自己有dll的代码,要不放弃这个念头,要不等着技术的发展吧。
真要搞是可以搞的,python直接調用此dll是沒辦法。但你可以先用VC++或C#開發一個接口層程序,做好調用這個DLL所需的初始化處理和包裝過渡工作,這部分等于就是對DLL進行開發。然后反過來,把python做為腳本語言嵌入到這個程序(如魔獸中的Lua),再通過這個內嵌的腳本語言在程序內部調用DLL的功能進行快速策略開發。
这部分应该就是SWIG完成的功能。 1. SWIG把目标对象的C/C++声明按照Python的C接口规范重新做了一层Wrapper,然后用编译器编译成.pyd, 这个就是上面说的一个接口. 这样在python中就可以直接import进来使用 由python 调用目标dll 变成了 由python调用 SWIG生成的中间对象,再由中间对象与原库打交道。
主要是考虑学习成本的问题 只有过去10多年前的c语言和unix下的编程和shell经验,结构化编程(过程编程),对windows和面向对象没经验,原先考虑python和Ruby就是看到它们最接近c和shell。 因为不太想搞个编译器,过去编译c的时候有体会,一点点小改动都需要重新编译,比较麻烦,这个也是动态解析语言的长处了。 Lua我也去找些资料看看,关键还是看它们是不是能很方便的调用第3方提供的接口DLL,因为目的就是为了使用第3方提供的接口,这些接口也一般都是以dll方式提供的。如果都是不很方便的,那只能考虑针对提供的接口使用相应的编程语言来处理了。