Dev-Cpp/Mingw32 环境介绍(14)

Dev-C++ & MinGW & wxWindows2.6.2 开发环境的配置              最近对wxWidgets产生了兴趣,想用用这个东西.  本来用VC6环境来对wxWindows进行配置,是最简单不过的了. 但我想到这个东东既然是可以在Linux下run的东西, 还是用MinGW下来使用他吧. 乘这个机会也学点gcc的使用.  经过一两天的摸索, 总算搞定.         一. 准备工作              wxWidgets2.6.2: 阅读详情

Dev-Cpp/Mingw32 环境介绍(14)


上文回顾:

在上一文中,我们了解了如何在GCC下使用汇编语言。后来,由于个人生活环境的原因所以迟迟没有发布新的内容。当然,我这里并不想说一些不愉快的事情。不过,我没有想到居然中国还会有那么没有道德的人存在。由于,我同宿舍的一个温州人,邀请N个同学通宵看电影,影响我睡眠,造成我睡眠严重不足。更可恶的是对我进行人权侵犯!所以,就没有时间静下心来写东西了。今天刚让事情平息了一些,就想到了我的朋友你,所以马上就献上最新的文章。

第十九章 GCC下编写Python扩展

在这一章中,我向大家介绍一些有关Python语言的扩展编写的基础知识。

如果,你对Python了解了。那么你可以跳过这段,阅读后面的内容。如果不是,那么还是请您耐心了解一下Python吧。Python是一种解释性语言,而且历史悠久。他是跨平台,面向对象,使用C编写,可扩展的。他从设计一开始就是为面向对象设计的。所以,可以说,Python是一种不错的语言。有关Python的更多内容介绍,你可以看看我曾经写的另一篇Python的文章《略谈Python语言》。


Python可以使用C这一可移植的语言来进行扩展。而且,由于是用C写的。所以,扩展的速度可以和静态语言相比。所以,可以说会写Python的扩展可以大大的提高项目的运行效率。当然还有其他的好处。


不过,本文并不是介绍Python的语言的,也不是专门介绍用C扩展Python的。所以,就像我曾经所说的,我本系列的文章只是为你开启一扇扇的门。


下面我就开始我的的主题了。


在开始一切之前,请您先到 http://www.python.org 上下载最新的解释器,并安装。在我写本文的时候,最新的版本是Python 2.4.2 。这里有关Python的安装,我就不一步步的详细介绍了。


开始写程序吧!


首先,我先给出一组简单的Python代码吧。

第一个文件为add.py文件,这个文件将是会被导入的。

#add.py

def add(x,y):

return(x+y)


第二个文件为main.py文件,这个文件将是会被执行的。

#main.py

import add

print add.add(256,512)


请将上面两个代码使用指定文件名(大小写也要注意,虽然在Win32下是不分大小写的)写入同一个目录下。然后,使用DOS终端在那个目录下输入 main.py 你将会看到他的输出为 768 。


下面我简单介绍一下两个代码的意思。

第一个文件中,定义了一个add函数,传入两个参数,分别命名为x和y。函数的作用是返回x+y的数值。

第二个文件中,我们首先导入了add.py这个文件,并把他的名字空间放到add空间中。然后,我们调用add中的add函数,并传入256和512。而且,最后在终端上显示add函数的返回值。


也许你会问,这不是介绍C的么?怎么又介绍Python了。其实,这个是为后面打下基础。


接着,我们试试用C在Python中实现add.py的功能吧。

//add.c

#include <Python.h>


static PyObject* add(PyObject *self, PyObject *args);


static PyObject* add(PyObject* self, PyObject* args)

{

int x=0 ;

int y=0;

int z=0;

if (! PyArg_ParseTuple(args, "i|i", &x, &y))

{

return NULL;

}


z=x+y;

return Py_BuildValue("i", z);

}


static PyMethodDef addMethods[] =

{

{"add", add, METH_VARARGS, "Execute a shell command."},

{NULL, NULL, 0, NULL}

};


PyMODINIT_FUNC initadd()

{

Py_InitModule("add", addMethods);

}


这段代码也许你会觉得有些糊涂,这是什么东西?下面我为你一一介绍。

首先的#include <python.h>是必须被导入的。这个在Python的安装目录的include目录中有。其次,我们定义了一个函数叫add。由于Python中的所有东西都是对象。所以,这里在C中,为了于Python通讯,C传给Python的,Python传给C的都是PyObject这个数据类型。下面PyArg_ParseTuple这一句,是将传入的数据转换成C类型的。Py_BuildValue这个函数是将C数据类型转化成Python的数据类型,并返回他。

接着,我们要告诉Python,我们C中的Python的函数有那些。所以,addMethods这个数据组,就是为了存放这些数据的。这个就是一个列表。最后那个initadd这个函数是在Python导入模块时初始化用的。必须存在。而且,比如以 init模块名的形式在命名。其中Py_InitModule函数,是告诉Python将addMethods这个列表所定义的内容,加入add这个名字空间中。

最后,我把代码在书写一遍。不过这次,我会用红色的部分标出套路的代码部分,也就是必须需要的地方。

#include <Python.h>


static PyObject* add(PyObject *self, PyObject *args);


static PyObject* add(PyObject* self, PyObject* args)

{

int x=0 ;

int y=0;

int z=0;

if (! PyArg_ParseTuple(args, "i|i", &x, &y))

{

return NULL;

}


z=x+y;

return Py_BuildValue("i", z);

}


static PyMethodDef addMethods[] =

{

{"add", add, METH_VARARGS, "Execute a shell command."},

{NULL, NULL, 0, NULL}

};


PyMODINIT_FUNC initadd()

{

Py_InitModule("add", addMethods);

}


最后,我们来把这个代码编译一下吧。你也许会问,既然是跨平台的,是否对于不同的操作系统,要使用不同的编译方式。答案是否定的。Python自带的编译脚本可以为你完成一切的编译过程。不过,你要在开始要把你的MinGW设置进环境变量中。具体可以看本系列文章第一章到第三章。

下面给出Python编译安装脚本的文件。

#!/usr/bin/python

#setup.py


from distutils.core import setup, Extension


module1 = Extension(name='add, sources = ['add.c'])


setup (name = 'PackageName', version = '1.0', description = 'This is a demo package', ext_modules = [module1])

这段代码是告诉Python如何来组成你的包。首先,第一句#!/usr/bin/python 是在BSD/Linux/Unix下告诉系统使用什么解释器运行代码在Win32下有和没有没什么区别。

Module1=Extension('mytest',sources=['add.c']是定义你第一个要编译扩展的信息。后面的setup函数,就是用来定义包的,其中在ext_modules中就在列表中加入了我们刚才定义的模块信息。这样,Python会更具你给的信息,更具不同的平台,操作系统自动的编译出合适的扩展文件。


在dos终端下输入setup.py build -cmingw32 如果没有错误,那么在编译后,你会在build目录中的子目录中找到add.pyd这个文件,这个就是Python的C扩展文件。把第一个例子中的add.py从目录中移除,并删除add.pyc这个文件(这个文件会在Python导入时自动生成,方便下次导入时快速执行和导入)。再将刚才编译的add.pyd放到该目录下。像刚才一样的运行,你看到了什么?和刚才一样的运行结果。对的。我这里的C扩展就是实现了刚才Python所定义的功能。怎么样是不是觉得还有很多不明白?如果你要深入Python的扩展编程,你可以看看Python的参考手册 Python/C API 这部分内容。下面列出一些Extension中一些参数的意义。


include_dirs 定义头文件的目录地址,默认情况下Python头文件目录的地址已经被定义了。

library_dirs 定义了库文件的目录地址,默认情况下Python的库文件目录也被包含了。

Libraries 定义在编译时要使用的库文件名,这个有点像GCC中在-l后面加的参数。


当然,还有其他很多参数。这里只是列出了常用的几个基本参数名和意义。希望我为你开启的门够宽敞。如果有兴趣,可以查看Python的参考手册。相信对你一定有很大的帮助。

好了,最后祝你在学习的过程中一切顺利,Good Luck。并且,希望有什么问题请你尽量提出来。


文外音:

就像我开始所说的,我由于生活环境的因素造成我迟迟没有写新的文章。这一点,是让我刚到非常亏欠于你的。不过,这也是最近一个月没有出文章的原因。前一阶段我也说过了,没有创意了。后来,偶然之间找到了中级篇的指导方向,所以马上就有了新文章的构思。希望我这篇文章能够让你们满意。谢谢你长久以来对我的支持。因为有了你,我才会有不懈的动力写下去。谢谢。如果你有任何的问题请到 http://blog.youkuaiyun.com/visioncat/ 上提出你的问题和建议。


STUDIO软件开发组(SDT)
STUDIO Development Team
北斗星君(黄庠魁)

Dev-Cpp/Mingw32 环境介绍(1) Dev-Cpp/Mingw32 环境介绍(1) 前言  对于现在越来越多得关于编程方面得问题和商业公司对版权问题的担心。所以向各位推荐一款类似于VC的IDE。这款IDE所使用的编译程序是 GCC的Win32版本 Mingw32。而IDE本身也是GPL协议的产物。所以,不论是商业用户,还是个人用户都能够自由的使用她,而不必为使用盗版软件而提心吊胆的。另外,由于Mingw32是GCC的 阅读详情

相关推荐

Dev-Cpp 5.2.0.3 MinGW32 Portable.7z

一款在Windows下的好用的C/C++ IDE,基于MinGW32 GCC编译器

mingw64安装_DevC++下载与安装教程

软件简介Dev-C++是一个Windows环境下的一个适合于初学者使用的轻量级C/C++ 集成开发环境(IDE),它是一款自由软件,遵守GPL许可协议分发源代码。Dev-C++ 使用MingW64/TDM-GCC编译器,遵循C++ 11标准,同时兼容C++98标准。开发环境包括多页面窗口、工程编辑器以及调试器等,在工程编辑器中集合了编辑器、编译器、连接程序和执行程序,提供高亮度语法显示的...

weixin_39997037的博客 1910

Dev-Cpp 5.3.0.2 MinGW 4.7.0 Setup

Dev-Cpp 5.3.0.2 MinGW 4.7.0 Setup 汉化版

Dev-Cpp/Mingw32 环境介绍(2)

Dev-Cpp/Mingw32 环境介绍(2)上文回顾:  上文(《Dev-Cpp/Mingw32 环境介绍(1)》)我们知道了该如何安装和使用Dev-Cpp。并且,知道了一些有关Mingw32的一些用法和一些有关程序的介绍和使用方法。学会了一些基本操作的方法。如新建项目,编译项目等。这一次,我们将继续上一次的内容。第三章 为你的Dev-Cpp安装开发包   对于许多程序员来说

北斗星君的专栏 1万+

Dev-Cpp 5.2.0.1 MinGW32

Dev-Cpp 5.2.0.1原版。经过试用没有广告。

完整版 Dev-C++ 5.2.0.3.exe

亲测好用,挺不错的资源,大家快来下载吧!挺有用的!需要的话可以来下载哦!新版的Dev-C++,已经修复了CPU 100%占用、卡死等Bug。但仍有一个Bug:从某一文件打开Dev-C++时,只能使用英文界面。下载之前请注意。

dev-c++/Mingw32环境解绍之---自已开发静态链接库

dev-c++/Mingw32环境解绍之---自已开发静态链接库费了半天的时间终于把这个学会了,自已按照资料上的(http://blog.youkuaiyun.com/visioncat)上例子,制作了静态库,是用C语言的,不过我学的是c++所以我就试着用c++写了一个,不过就是最后一步没有成功,每运行一次就黑屏两秒钟!怪事!也没有找出错来,到现在早上8.06分我已好久没有睡觉了!所以先把这个用C写的静态库写

cndeer的专栏 3984

基于VH6501的Busoff测试

摘要: 本文介绍使用VH6501和CANoe工具测试ECU的Busoff Recovery机制。通过干扰报文触发Busoff状态,验证快恢复(连续32次,间隔100ms)和慢恢复(间隔1000ms)的时序及次数是否符合要求。测试步骤包括硬件配置、干扰参数设置及Trace窗口错误帧分析,最终通过错误帧间隔判定恢复机制的正确性。

酒酿丸子的博客 1039

环境配置(一)vs code配置C++环境(MinGW使用Dev-Cpp自带的)

1、配置MinGW的系统环境变量 将Dev-Cpp/MinGW64/bin添加进系统环境。方法为“计算机右键-》属性-》高级系统设置-》环境变量-》系统变量-》Path-》添加相应路径” 2、下载安装VSCode,安装C/C++插件 3、配置VSCode 首先在VSCode中打开一个文件夹(工作区),后续配置将只在本文件夹(工作区)内有效。其他文件夹(工作区)可参照以下步骤再配置一...

imiss的博客 6104

UE5.3.2 + VS2022社区版在Win11上的C++编译环境配置全解

Unreal Engine 5的C++开发依赖严格的工具链协同,其核心在于Visual Studio编译器版本、Windows SDK与引擎构建系统(UBT)的精准匹配。UE5.3.2强制要求MSVC v143.4(即VS2022 17.4+)及Windows 11 SDK 10.0.22621.0,任何偏差都会引发LNK2019链接失败、C1083头文件缺失或MSB8066构建中断等典型错误。该配置不仅关乎安装顺序,更涉及注册表清理、PATH环境变量、SDK路径注入与运行时DLL加载等底层机制。适用于Wi

weixin_33978722的博客 367

银河麒麟v10(x86_64)升级openssh实操成功

本文详细介绍了在银河麒麟V10系统上将OpenSSH从8.2p1升级至9.9p2版本的全过程。主要内容包括:系统环境确认、安装telnet备用连接、备份配置、卸载旧版本、安装新版本、服务配置与验证等关键步骤。特别强调了安全注意事项,如必须安装telnet作为备用连接、重要配置备份等。升级后提供了安全加固建议,包括修改SSH端口、禁用root登录等。文章还包含详细的故障排查方法和恢复方案,确保升级过程安全可靠。通过本教程,用户可以顺利完成OpenSSH版本升级,提升系统安全性。

淘淘小窝 1089

Dev-Cpp/Mingw32 环境介绍

http://wxjiao.blog.hexun.com/1945078_d.html     Dev-Cpp/Mingw32 环境介绍 [转贴 2005-12-30 14:37:51]   字号:大 中 小 文章来源: 点击查看原文:Dev-Cpp/Mingw32 环境介绍 Dev-Cpp/Mingw32 环境介绍(1)   前言

zenwanxin的专栏 1万+

T型三电平关管顺序要求

摘要: T型三电平拓扑中,IGBT关断必须遵循“外管先关、内管后关”的时序,否则易导致器件损坏。正常导通时,外管与内管共同分担电压;正确关断时,外管先关使电流经内管续流至中点,避免电压过冲;若内管先关,电流路径被强制切断,杂散电感引发高压尖峰击穿器件。这一时序本质是为电流提供低应力续流路径,需通过硬件或软件严格保障。

yun0804的博客 2374

Dev-Cpp/Mingw32 环境介绍(12)

Dev-Cpp/Mingw32 环境介绍(12)上文回顾:在上一篇文章中,我们了解了如何在MinGW中设置GTK和使用GTK。从这一篇开始,我我们就要开始进入中级篇了。也就是说,我们主要以MinGW和其他GCC在Win32下的使用为主。而不是如同原来只介绍那些操作IDE,安装组件等。如果说,以前我们是在跑道上,那么现在我们就要起飞了。所以,我们会比较注重以MakeFile来说明程序的配置。同时会带

北斗星君的专栏 7377

LLM and Embedding区别

LLM(大语言模型)和 Embedding(嵌入)是自然语言处理(NLP)中的两个核心概念,它们的核心区别在于。Embedding 计算向量。

u010674101的专栏 1874

YOLOv11 改进 - SPPF模块 | 发论文神器!LSKA注意力改进SPPF,增强多尺度特征提取能力,高效涨点!!!

本文介绍了Large Separable Kernel Attention (LSKA)模块及其在YOLOv11中的结合应用。LSKA旨在解决Visual Attention Networks (VAN)使用大内核卷积时的计算效率问题,通过将2D深度卷积层的卷积核分解为级联的水平和垂直1-D卷积核,降低了计算复杂度和内存占用,且使VAN更关注物体形状。我们将集成LSKA的SPPF_LSKA模块引入YOLOv11,大量实验表明,改进后的模型在对象识别、检测、分割和稳健性测试上表现出色。

魔改工程师的博客 1279

《Dev-Cpp/MinGW32 环境介绍》改版初搞

《Dev-Cpp/MinGW32 环境介绍》改版初搞 背景: 自从2004年8月第一篇《Dev-Cpp/MinGW32 环境介绍》问世以来,这一系列的文章可谓是受到广大变成爱好者的欢迎和拥护。可以说,这一系列的文章是我高中时代的一份代表作。原本只是出于好玩所写的文章,却成为了人们互相传阅的文章,这一点是我所没有料到的。正如我所说的,这些文章是我高中所写的,所以,由于时间上的因素,

北斗星君的专栏 1万+

信捷PLC XD5系列运动控制(10轴)编程应用篇

项目PLC采用XD5-60T10-E,36DI 24DO 晶体管输出,支持10路脉冲输出功能。TMR指令定时器时基可以自己设定,这点比其他品牌PLC方便。ZRN指令我们需要上升沿指令触发。 5、变址寻址 该说不说这个变址寻址是真的强,比西门子指针、三菱的变址寄存器Z 、V都要更加灵活。 7、特殊寄存器:时钟 8、如何建立PLC通讯...............

RXXW_Dor的博客 1万+

Dev-Cpp/Mingw32 环境介绍(4)

Dev-Cpp/Mingw32 环境介绍(4)上文回顾:上文《Dev-Cpp/Mingw32 环境介绍(3)》向各位介绍了有关使用GDB调试程序的简单方法。本文我们将会看看Mingw32如何来使用静态连接库。虽然本文出炉的时间的确是有些慢了点。不过我想各位应该能够理解的。第七章 在你的程序中使用静态连接库   在Windows中也许各位都会熟悉以obj和lib结尾的文件。这

北斗星君的专栏 9046

基于深度学习的异常检测实战:从自编码器到GAN

本文通过一个完整的实战案例,展示了如何使用自编码器和GAN进行异常检测。我们详细介绍了数据准备、模型定义、训练和评估的步骤,并提供了可运行的代码。希望本文能为读者在实际项目中应用异常检测技术提供实用的指导和启发。

Programming Talk 242

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Dev-Cpp/Mingw32 环境介绍(7)

上文回顾:在上文 《Dev-Cpp/Mingw32 环境介绍(6)》 中我们知道如何制作动态库和使用。并在前面都介绍的Dev-Cpp/Mingw32的使用方式。从这里后面,我将根据我使用下来的一些经验和开发工具与Dev-Cpp/Mingw32结合的方式和结合后的使用方式。希望各位能够认真的提出意见,并好好的使用。因为,这些东西,都是我多年的经验和与广大网友交流的产物。下面我要根据现状,改变一下我讲

北斗星君的专栏 7174

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Dev-Cpp/Mingw32 环境介绍(9)

上文回顾:在上一篇中,我为各位介绍了如何制作包文件,和新建一个自定义的工程。下面我按照约定,要介绍wxWidget的安装。本文适合Dev-Cpp和Mingw32编译器的。第十四章 wxWidget的下载与安装  这一章我将为各位介绍如何下载安装wxWidget这个GUI开发库。  首先,我们先要知道,我们是在win32下使用wxWidget的。所以,我们现在要下载的是wxMSW这个开发库。

北斗星君的专栏 7584

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Dev-Cpp/Mingw32 环境介绍(5)

Dev-Cpp/Mingw32 环境介绍(5)上文回顾:上文《Dev-Cpp/Mingw32 环境介绍(4)》我们介绍了如何使用 静态连接库。今天我们介绍如何制作自己的Mingw32的静态链接库。至于Win32下的那种静态连接库我想熟悉Win32的人应该很清楚如何制作。所以我们这里就不做介绍了。 第八章 制作自己的静态链接库  这是第八章,八这个数字很多人都喜欢。我也一样。(感

北斗星君的专栏 8159
上一篇: 优秀的条件
下一篇: 从逻辑分区中划出主分区
VisionCat
博客等级 码龄24年 459粉丝 83原创
评论 63
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值