FREEBASIC 编译可被python调用的dll函数示例
<转帖子请注明出处>
程序员的两极分化:
①软件专业性加强。许多的软件都要做软件工程,要团队进行合作开发,单打独斗已经无法开发出功能很强的软件;这类程序员对某个编程软件要非常精通,但对其他的软件
②个人编制一些对工作有帮助的软件。这类软件并不要求很高的安全性。方便快捷是它的特点。这类程序员所以的编程语言很多,很多语言都懂一些,但不专精。
Python:
Python在工作中用的很多:扩展库较多、语法简洁、可以边用边写脚本、可以非常的方便。
但是有一个问题很让人困扰:要进行大规模的数据计算的时候,运行时间太长让人难以忍受。
网上查找了很多的资料,有很多的加快python的方法:
+ pysco: 好像速度提升不错,但是2.7以上不再支持,主要原因是它太占用资源,所以python社区把它给放弃了;
+ pypy:另外再搞一个python? NO! 很明显,我要放弃很多CPYTHON中支持的资源。
+cython: 这货基本就是C语言语法、python语法的综合体。同时考虑两种语言,写程序的时候是不是更容易出错?放弃。
Freebasic:
这个是让我兴奋而有伤感的语言。
兴奋的理由:FreeBasic支持东西太多了:跨平台、语法基本同传统的BASIC,不存在语言上的学习难度、支持指针、支持类(简易)、动态库dll,so编写、编译速度快、运行速度快(GCC相当)、帮助文件非常全面,几乎所有问题在帮助文件上可以找到、持库很多:图形、数据库、游戏等等。简单来说,这货就是一个basic语法的C语言!
伤感的理由:这么功能全面,体积很小的软件在国内竟然看不到有热闹的论坛!但是国外却有不少。好像国内程序猿的素质都很高,都去做网络应用去了,不屑于搞这个了(好吧,看看现在国内软件体积有多么庞大就知道了)。
好的,下面它就要出场了。看看它是多么的简洁,强大!
好吧,我考虑的思路还是让python直接调用底层的dll来加快速度。网上也有不少这样的示例。用ctypes调用C编写的dll动态库。
如果你对C非常精通,那就跳过;如果你想更简单一点的话,就看我的示例吧。
Freebasic 的 函数编制中加入 “export”关键字就可以导出一个标注的.dll,.so库了。
程序如下:
以下文件名称为dll.bas
'1.函数test Function test Cdecl Alias "test"( byval operand1 as integer, byval operand2 as integer ) as integer export 'OK!-按值传递 '调用示例 'from ctypes import * ' '#libtest=CDLL("D:\pythonUser\dll.dll") 'libtest=cdll.LoadLibrary("D:\pythonUser\dll.dll") 'print libtest.test(10,12) '结果为-2 ' Return operand1 - operand2 end Function '2.函数test3 Function test3 Cdecl Alias "test3"( operand1 as integer, operand2 as integer ) as integer export 'OK!-按地址传值 '调用示例 'from ctypes import * ' '#libtest=CDLL("D:\pythonUser\dll.dll") 'libtest=cdll.LoadLibrary("D:\pythonUser\dll.dll") 'print libtest.test3(10,12) '结果为-2 Return operand1 - operand2 end Function '3.函数test2 Function test2 Cdecl ( byval operand1 as integer, byval operand2 as integer ) as integer export ' 错误:导出函数没有别名“alias”,无法被python找到函数名 ' ctypes 导入时正确 ' 但是调用 print libtest.test2(10,12)时,无法找到函数名 ' Traceback (most recent call last): '----------python 错误列表--------------------- ' File "<stdin>", line 1, in <module> ' File "C:\Python27\lib\ctypes\__init__.py", line 378, in __getattr__ ' func = self.__getitem__(name) ' File "C:\Python27\lib\ctypes\__init__.py", line 383, in __getitem__ ' func = self._FuncPtr((name_or_ordinal, self)) ' AttributeError: function 'test2' not found '----------------------------------------------- Return operand1 - operand2 end Function
'编译:
'C:\Program Files\FreeBASIC\fbc -s gui -dll -export "dll.bas"
'生成 dll.dll 链接库
把dll.dll文件放到 c:\python27 安装目录下,
from ctypes import * libtest=CDLL("dll.dll") print libtest.test(10,12)
也同样可以!
你看是不是很简单?可以说是完美!
经测试,同样的代码,dll可以提高5倍左右的速度。毕竟是GCC级的编译水平嘛。
希望能够对您的编程起到帮助作用!
(adsbygoogle = window.adsbygoogle || []).push({});
- Ubuntu下编译安装OpenCV 2.4.13以及Python调用OpenCV方法
- Python 3.X 调用多线程C模块,并在C模块中回调python函数的示例
- python实现sublime3的less编译插件示例
- 通过编译luaSQL调用ODBC连接Access以及给OpenResty(LuaJIT)编写简单的C扩展示例
- python调用Delphi写的Dll代码示例
- C#调用Python脚本的简单示例
- centos swig 编译c,python调用
- python连接mysql调用存储过程示例
- python调用 C/C++ 代码示例
- python实现sublime3的less编译插件示例
- python使用ctypes模块调用windowsapi获取系统版本示例
- ubuntu下yael库调用与编译示例
- Python通过调用有道翻译api实现翻译功能示例
- eoLinker-API Shop 二维码编解码 Python调用示例代码
- QT程序调用(内嵌)Python 编译成EXE
- [转]vs2010用 boost.python 编译c++类库 供python调用
- Python的净值数据接口调用示例分享
- C#调用Python脚本的简单示例,IronPython(转载)
- C#调用Python脚本的简单示例
- python调用c++代码,.so库的编译