perl win32 API编程入门

<!--list-->

2009-09-13

perl win32 API编程入门 - [perl]

版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://ddle.blogbus.com/logs/46349748.html

让perl实现良好的跨平台性是perlish们一直在努力的事情,如今,随着perl的发展,perl环境的跨平台性已经做得相当稳定,但是,相当多程序还是无法像在UNIX下一样良好、稳定地运行,但是,win32::API模块的出现却多少让我们看到了一些希望。在ActivePerl 5.6的时候,Win32::API默认是不安装的,在到了ActivePerl 5.8的时候,Win32::API已是默认安装的模块,也正是因此这一点,多少引起了笔者的一点注意,所以试探性地使用了一下,很快笔者就发现,模块功能果然如其名,无需调用任何XS外部扩展即可在win32平台下随意调用api函数,使得perl能在win32环境中自由飞翔 ……

废话说得太多了,今天先将入门,简单说几个:
先说一下ActivePerl User Guide里面给出的例子吧,大家用perldoc win32::api看一下pod就可以看到了,例子如下:

use Win32::API;
$obj = Win32::API->new('kernel32.dll','int GetCurrentProcessId()');
$pid = $obj->Call();
print $pid;
注意模块中的大小写问题,用过perl的都知道,熟悉UNIX的朋友更应该不会用错。
程序会返回一个pid值,是程序运行过程的pid值。

这里的程序是ActivePerl User Guide里在描述那节中的第二种形式,之所以先拿这个出来,是因为,对于上面的调用过程,比较符合正常的面向对象的模块编程,所以,这里我认为无需解释什么,很容易懂。

接下来再看同样作用的程序的另一种样子:

use Win32::API;
Win32::API->Import('Kernel32.dll','int GetCurrentProcessId()');
$pid = GetCurrentProcessId();
print $pid;

这里用了个import方法,呵呵,这个作用让我想起了python程序中的import,好怀念,相比之下,因为用惯了python,我更喜欢用这样的方法,我们就可以理解为,import方法将本属于Win32::API这个名字空间中的一个subroutine导入到了当前的名字空间中,成为一个当前程序中全局的subroutine,因此,后面$pid = GetCurrentProcessId();就直接调用了。

解释的是否明白?
呵呵,如果不明白的话看下Programming Perl吧,里面有关于名字空间的解释。

说到这里,一些比较简单的调用方法就已经讲清楚了,呵呵,如果熟悉C或是B程序的读者应该比我还要清楚咯,这里再给一个例子,这个例子的作用是获取windows的错误信息,在给出之前,先写另外一个例子,这个例子是我们没有使用API而只使用perl的win32模块获取win32错误信息的方法:

use Win32;
$err_id = Win32::GetLastError();
print $err_id;

这样返回一个错误的ID值,呵呵,看不懂吧,没关系,win32模块还提供了一个方法用以解释这个ID,如下:

use Win32;
$err_id = Win32::GetLastError();
$err_msg = Win32::FormatMessage($err_id);
print $err_msg;

这里就返回一个信息“系统找不到指定的文件。”,呵呵,看懂了吧(因为程序没调用任何文件,所以返回这样的信息)

好,看完上面的,看一下通过api来获取错误的ID值:

#!/usr/bin/perl
use Win32;
use Win32::API;
$obj = Win32::API->new("Kernel32.dll","int GetLastError()");
$err = $obj->Call();
print "Error Code is : ",$err,"\n";
$err_msg = Win32::FormatMessage($err);
print "Error Msg is : ",$err_msg;
这里讲述了最简单的API调用方法,今天先讲到这里,因为关于API的调用我也正在研究中(呵呵,偶的C语言不好,需要复习一下),到时候如果研究出更强的东西,再和大家分享!

Perl for Win32 Build B515源码编译与Win32扩展开发指南 在Windows平台上从源码构建Perl解释器,一直是系统集成与遗留项目维护中的经典课题。理解编译原理、系统接口封装与扩展模块的加载机制,是掌握这一技术路线的核心。Perl for Win32 Build B515作为Perl 5.6时代在Windows原生环境下走向成熟的代表版本,其源码不仅展示了解释器、标准库与Win32系统扩展的完整组织方式,更通过Makefile、config.w32及PerlHost抽象层体现了跨平台移植的工程智慧。通过实践编译生成perl.exe、接入Win32::Registr 阅读详情

相关推荐

Perl与其他编程语言的集成

本文将探讨Perl语言如何与C和其他编程语言集成,包括库的加载、函数签名的定义、回调的使用,以及如何从C语言中嵌入Perl。通过实例和详细解释,本文将深入分析这些集成方法的原理和操作。

weixin_36122351的博客 893

Perl控制windows进程

1:Perl中的 "Win32" 模块提供了很多Win32的API。在windows上使用perl进行开发的时候是必不可少的模块。简单总结一下本人的使用心得。   A:Win32::CopyFile(FROM, TO, OVERWRITE)   ---拷贝文件

614

Perl for Win32 B515源码构建:从环境配置到遗留系统兼容实践

Perl 作为一种跨平台脚本语言,在 Windows 上的移植历史中,Perl for Win32 Build B515 记录了解释器从“能跑”到“跑得稳”的关键阶段。源码构建是理解这种移植机制的基础路径,它通过条件编译和专门适配层,让同一套核心代码在 Win32 API 上完成进程管理、文件 I/O 等底层能力的映射。对于维护遗留 Windows Perl 脚本的开发者,重现 B515 能精准定位历史兼容边界;对研究解释器实现的人,这份源码也是理解跨平台适配的简洁范本。借助 MSVC 工具链与 nmake

weixin_33795093的博客 255

安装perl模块的一个好地方(ActivatePerl )

比较了一下还是 http://www.bribes.org/perl/ppmdir.html 这个网站好,如果没有代理的限制,直接从网络上安全PPM格式的各种模块非常方便,比从ActivatePerl的网站上下载容易多了。PPM...

cuanyangpa3685的博客 577

Perl for Win32 Build B515 源码解析:从移植历史到现代重建

Perl 作为经典的跨平台脚本语言,在早期 Windows 环境下却面临 fork 缺失、POSIX 语义差异等重重阻碍。ActivePerl 的 Win32 移植层通过专用源码目录与 API 模拟,为 Perl 在 Windows 上的落地提供了关键支撑,而 Build B515 正是这一技术路线的历史坐标。深入源码可以发现 SV 标量体系、op 树和 pp 函数构成了解释器核心,win32.c 等文件则承担了文件描述符、socket 与进程模拟的底层适配。借助虚拟机搭配 Visual C++ 6.0,我

weixin_32325225的博客 169

Perl for Win32 B515源码深度拆解:从跨平台解释器到构建实战

解释器是编程语言运行的核心,跨平台解释器则需要解决系统调用差异、IO抽象和可移植性等底层问题。Perl通过宏重定向和PERLIO抽象实现平台解耦,让同一套C代码在Windows和Unix上都能编译运行。理解这类源码结构,对维护老项目、将Perl嵌入C程序、乃至研究解释器设计都极具价值。本文以Perl for Win32 Build B515源码包为标本,系统梳理了win32目录下的平台适配层、核心C文件职责、基于nmake的完整构建链路,以及常见构建避坑方法,并演示了如何添加一个迷你XS扩展的完整流程,帮助

weixin_29611239的博客 279

从零构建企业级AI消息中台:DeepSeek+企业微信的架构设计与性能调优

本文详细介绍了如何从零构建企业级AI消息中台,结合DeepSeek大模型与企业微信API实现智能消息处理。通过分层架构设计、性能调优和深度集成实践,提升系统的高并发处理能力与稳定性,助力企业实现自动化消息推送与智能客服等核心场景。

assembly8low的博客 996

ActivePerl Build B515 实践:Perl for Win32 的安装、配置与源码处理指南

脚本语言在现代开发中不可或缺,尤其在 Windows 环境下进行文本处理、系统管理和快速自动化。Perl 作为经典的动态语言,在 Win32 平台上的原生支持曾长期依赖 ActivePerl 这类打包发行版。其核心原理是通过集成解释器、模块管理工具(如 PPM)和系统接口封装,让开发者能直接在命令行中调用 Perl 脚本,甚至借助 Win32::API 操作鼠标、串口等系统资源。这一技术价值在遗留系统维护、源代码批量替换和跨平台脚本迁移中尤为突出。常见的应用场景包括批处理大量源文件、调用系统动态库、以及编译

weixin_31423955的博客 111

perl module: Win32::OLE

所有文章从学习笔记中摘出来,如有从其他地方转贴,请指正!! #从一个excel里复制一工作表到另一excel中$src_book->Worksheets(1)->Copy($dst_book->Worksheets('sheet3')); Example: my $ex = Win32::OLE->GetActiveObject('Excel.Applicatio...

xiaoxingan99的博客 1037

Perl DBI编程.pdf

DBI是Perl数据库编程的主要接口。它与数据库产品无关,且为几乎所有的数据库产品提供了一致的子例程集。DBI将实际的数据库驱动程序与API分离,这样DBI程序可以处理任何数据库,甚至可以同时处理不同厂商的多个数据库。 对新手而言,本书解释了DBI的体系结构和如何编写基于DBI的程序;对专家而言,本书阐述了DBI的技术内幕和每个DBD的特性。 作品目录编辑 一, 简介   二, 非DBI数据库基础   三, SQL和关系型数据库   四, DBI编程   五, 数据库操作   六, 高级DBI   七, ODBC和DBI [1]

Perl教程—Win32版

Perl教程—Win32版

perl Win32::Process 进程管理

NAME Win32::Process - Create and manipulate processes. SYNOPSIS use Win32::Process;use Win32; sub ErrorReport{    print Win32::FormatMessage( Win32::GetLastError() );} Win32::Process::Create(

luxiuwen的专栏 2444

win32的

win32的

perl 安装mysql_Perl +MySQl安装说明

Perl对MySQL的支持借助DBI/DBD客户接口而提供。见20.5 MySQL Perl API。PerlDBD/DBI客户代码要求Perl 5.004或以后版本。如果你有Perl的一个更旧的版本,接口将不能工作。MySQL Perl支持也要求你安装了MySQL客户编程支持。如果你从RPM文件安装MySQL,客户程序在客户RPM中,但是客户编程支持在开发者RPM。确定你安装了后一个RPM 。对...

weixin_29643223的博客 757

Perl语言进行Socket编程

用Perl语言进行Socket编程,Perl调用Socket API

perl_open.rar_open_win32apiperl

perl使用win32 api来打开文件的操作。会跳出对话框。包括主程序实例和模块

使用perl 检测硬盘信息-共勉

最近案子比较棘手,需要编写perl脚本 检测系统中SSD盘的逻辑盘符。研究了大半天,搞定。现同大家分享,以作共勉。 用perl 实现同win32 ::OnDeviceChange一样 获取系统中磁盘信息的功能: #vicky finished by 10-03-13 22:10#!/usr/bin/perl#use Win32::kernel32;use win32

我为编程狂,我为外语狂 1517

双系统下 ubuntu 20.04 突然 开机黑屏报错 hdaudioC0D2: unable to configure disabling

今天在开实验室开双系统台式机时,ubuntu 20.04 系统下,突然在某次关机后再开机时,本来启动好好的,但是在进行图形化启动时,本来应该是显示输入账号和密码时,直接黑屏报错了,内容为 hdaudioC0D2: unable to configure disabling ,这里是记录了报错的解决全过程

qq_48717745的博客 989

Perl取得和修改文件属性(WIN32系统)

有的时候我们会需要处理到文件的一些属性,比如说只读、隐藏之类的, 我这里大概说下在WIN32下如何取得和修改文件的属性。 需要: use Win32::File; 然后使用如下方法: my $set; #取得文件的属性Win32::File::GetAttributes($name, $set); #设置文件的属性Win32::File...

weixin_34352449的博客 88

ISP模块之色彩增强算法--HSV空间Saturation通道调整

色彩增强不同于彩色图像增强,图像增强的一般处理方式为直方图均衡化等,目的是为了增强图像局部以及整体对比度。而色彩增强的目的是为了使的原有的不饱和的色彩信息变得饱和、丰富起来。对应于Photoshop里面的“色相/饱和度”调节选项里面对饱和度的操作。色彩增强的过程,并不改变原有彩色图像的颜色以及亮度信息。     在我的色彩增强算法模块里面,始终只针对色彩饱和度(Saturation)信息做研究,

松间明月 1万+

L2tp环境搭建笔记- Openwrt平台

本文使用3台openwrt设备, 分别搭建L2TP服务和2个客户端, 进行端到端验证和局域网组网,并分析搭建过程中涉及的默认路由( defaultroute) 配置问题。

十年通信老兵的技术修炼之路——从3G到5G,从地面基站到卫星通信。 3388
上一篇: 神奇的Perl-哈希与数组(8)
下一篇: php-数据库连接参数-在需要连接数据的PHP使用require_once它
deepfuture
博客等级 码龄17年 210粉丝 1287原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值