perl win32 API程式設計入門

2021-08-30 18:53:14 字數 1916 閱讀 3376

<<  perl的socket程式設計

| 首頁

| perl & lwp學習筆記(3):lwp類模組  >>

讓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;

說到這裡,一些比較簡單的呼叫方法就已經講清楚了,呵呵,如果熟悉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語言不好,需要複習一下),到時候如果研究出更強的東西,再和大家分享!

多執行緒程式設計win32 API

win32 提供了一系列的api函式來完成執行緒的建立 掛起 恢復 終結以及通訊等工作。下面將選取其中的一些重要函式進行說明。1 handle createthread lpsecurity attributes lpthreadattributes,dword dwstacksize,lpthre...

Win32 API 與PB程式設計

1.如何使pb視窗總在最上層 通過setwindowpos函式吧視窗的顯示層次修改為hwnd topmost,就可以使指定視窗永遠不會被其他視窗覆蓋,該函式宣告為 function long setwindowpos long hwnd,long ord,long x,long y,long dx,...

使用Win32API開始openGL程式設計

其實windows下opengl程式設計更多的是使用win32api結合opengl函式的方式,下面做一些介紹 二 使用win32api開始opengl程式設計 這其實只是涉及到win32api和wgl函式,前者建立起執行的視窗環境,後者建立opengl執行環境,網上的文章更多,這裡節選了nehe ...