文档章节

FREEBASIC 编译可被python调用的dll函数示例

Cdongdong
 Cdongdong
发布于 2014/04/16 08:27
字数 1107
阅读 317
收藏 1

 <转帖子请注明出处>

程序员的两极分化:

①软件专业性加强。许多的软件都要做软件工程,要团队进行合作开发,单打独斗已经无法开发出功能很强的软件;这类程序员对某个编程软件要非常精通,但对其他的软件

 

②个人编制一些对工作有帮助的软件。这类软件并不要求很高的安全性。方便快捷是它的特点。这类程序员所以的编程语言很多,很多语言都懂一些,但不专精。

 

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级的编译水平嘛。

 

希望能够对您的编程起到帮助作用!

 

 

 

 

© 著作权归作者所有

Cdongdong
粉丝 0
博文 4
码字总数 1529
作品 0
常州
私信 提问
FREEBASIC 编译可被python调用的dll函数示例-续(1)

前文我们已经说过了如何用freebasic编制dll被python调用,本节是通过示例来对比其运行效率。 废话不说,上代码: myfib.bas 编译后生成myfib.dll fbc -s gui -dll -export "myfib.bas" 'myli...

Cdongdong
2014/04/16
410
0
Win7系统安装FreeBasic编译器与FBIde开发环境

1.我的环境 操作系统:32位 Win7 旗舰版 Service Pack 1 2.安装FreeBasic编译器 OSC上FreeBasic的页面是:http://www.oschina.net/p/freebasic FreeBasic官方网站的首页是:http://www.free...

北风其凉
2014/12/11
2.5K
0
软件FreeBasic的下载地址变了

今天在开源中国的FreeBasic页面(http://www.oschina.net/p/freebasic)上看到 在“软件下载”一项中,页面给出的地址是: http://www.freebasic.net/index.php/download 这个页面现在已经不...

北风其凉
2014/12/11
421
0
中文版的:VisualFreeBasic 3.9.3

因为第一门语言是BASIC,最早的开发工具也是QuickBASIC,所以对BASIC一直怀念。今天找到一个汉化的FreeBASIC,有兴趣的朋友去下载一个体验一下。顺便点个赞。 下载地址:http://www.yfvb.com/s...

zdhsoft
2018/04/25
0
0
可视化FreeBasic集成开发环境

类似VisualBasic6的FreeBasic语言集成开发环境。拥有和VB6高度相似的语法规则, 具有和C语言一样强大的功能,支持面向对象,这就是VisualFreeBasic。很绿色,很纯净,不需要任何运行库,解压...

勇芳软件
2018/02/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

nginx学习笔记

中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯。 是连接两个独立应用程序或独立系统的软件。 web请求通过中间件可以直接调用操作系统,也可以经过中间件把请求分发到多...

码农实战
今天
5
0
Spring Security 实战干货:玩转自定义登录

1. 前言 前面的关于 Spring Security 相关的文章只是一个预热。为了接下来更好的实战,如果你错过了请从 Spring Security 实战系列 开始。安全访问的第一步就是认证(Authentication),认证...

码农小胖哥
今天
13
0
JAVA 实现雪花算法生成唯一订单号工具类

import lombok.SneakyThrows;import lombok.extern.slf4j.Slf4j;import java.util.Calendar;/** * Default distributed primary key generator. * * <p> * Use snowflake......

huangkejie
昨天
13
0
PhotoShop 色调:RGB/CMYK 颜色模式

一·、 RGB : 三原色:红绿蓝 1.通道:通道中的红绿蓝通道分别对应的是红绿蓝三种原色(RGB)的显示范围 1.差值模式能模拟三种原色叠加之后的效果 2.添加-颜色曲线:调整图像RGB颜色----R色增强...

东方墨天
昨天
11
1
将博客搬至CSDN

将博客搬至CSDN

算法与编程之美
昨天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部