`
deepfuture
  • 浏览: 4401099 次
  • 性别: Icon_minigender_1
  • 来自: 湛江
博客专栏
073ec2a9-85b7-3ebf-a3bb-c6361e6c6f64
SQLite源码剖析
浏览量:80080
1591c4b8-62f1-3d3e-9551-25c77465da96
WIN32汇编语言学习应用...
浏览量:70074
F5390db6-59dd-338f-ba18-4e93943ff06a
神奇的perl
浏览量:103372
Dac44363-8a80-3836-99aa-f7b7780fa6e2
lucene等搜索引擎解析...
浏览量:285854
Ec49a563-4109-3c69-9c83-8f6d068ba113
深入lucene3.5源码...
浏览量:15015
9b99bfc2-19c2-3346-9100-7f8879c731ce
VB.NET并行与分布式编...
浏览量:67592
B1db2af3-06b3-35bb-ac08-59ff2d1324b4
silverlight 5...
浏览量:32158
4a56b548-ab3d-35af-a984-e0781d142c23
算法下午茶系列
浏览量:45997
社区版块
存档分类
最新评论

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语言不好,需要复习一下),到时候如果研究出更强的东西,再和大家分享!

分享到:
评论

相关推荐

    linux/windows平台qt编程入门2

    总的来说,Qt编程入门需要理解Qt库的结构、控件的使用、信号与槽机制、模型视图架构、网络编程以及数据库连接等核心概念。此外,熟悉Qt Creator这样的集成开发环境,掌握qmake构建系统,以及使用Qt Designer进行界面...

    perl.pdf

    该语言最初是在 Unix 系统上发展起来的,但到 1997 年,Perl 已经移植到了多种平台之上,包括基于 Win32 API 的 Windows 95/NT 系统。Perl 在 Web 开发领域中非常流行,特别是作为 CGI 脚本的语言。 本指南并非旨在...

    各种编程书下载地址

    - **知识点**:这可能是一本关于如何使用Delphi调用Win32 API的教程或指南。 - **应用场景**:适用于使用Delphi进行Windows应用程序开发的人员。 #### 31. **Delphiú.txt** - **知识点**:这可能是一份关于Delphi...

    WMI入门教程(微软版)之一

    在WMI出现之前,系统管理员主要依赖图形化管理工具或通过调用Win32 API来管理Windows资源,这限制了脚本语言在系统管理中的应用。WMI的出现提供了统一的模型和框架,使得所有Windows资源都能够被描述并对外公开,...

    2018 猎豹网校 教程大全 资源难找赶紧保存吧

    安卓 Android 游戏编程入门(上)[MP4] Word排版高级技巧[MP4] Word 零基础入门[MP4] Windows程序设计 初级课程(一)[MP4] Windows Api学习指南[MP4] VisualSVN Subversion[MP4] Visual C# 入门经典[MP4] VC++ ...

    Sphinx 在 windows 下安装使用.docx

    Sphinx是一个高性能、开源的全文搜索引擎,它提供了多种编程语言的API,如PHP、Python、Perl和Ruby,同时也能作为MySQL的存储引擎。以下是详细的知识点解析: 1. **Sphinx特性**: - 高速索引构建,峰值性能可达10...

    java新手必读,一些入门知识

    通过安装相应的插件,Eclipse能够支持C/C++、Python、Perl等语言的开发。此外,Eclipse的架构允许用户开发自己的插件,从而扩展IDE的功能。 - **特点**: - **开源**: Eclipse是一个开放源代码项目,任何人都可以...

    PHP5 开发手册 简体中文手册

    win32service Functions CLIX. xattr Functions CLX. xdiff Functions CLXI. XML 语法解析函数 CLXII. XML-RPC 函数 CLXIII. XMLReader functions CLXIV. XSL functions CLXV. XSLT Functions CLXVI. YAZ Functions...

    php帮助文档,php。chm,php必备的中文手册

    win32service Functions CLX. xattr Functions CLXI. xdiff Functions CLXII. XML 语法解析函数 CLXIII. XML-RPC 函数 CLXIV. XMLReader functions CLXV. XSL functions CLXVI. XSLT Functions CLXVII. YAZ ...

Global site tag (gtag.js) - Google Analytics