程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> dotNET C# Programmer’s Guide to the Win32 API (Win32 API 聲明C#版)

dotNET C# Programmer’s Guide to the Win32 API (Win32 API 聲明C#版)

編輯:.NET實例教程
dotNET C# Programmer’s Guide to the Win32 API (Win32 API 聲明C#版)



小氣的神 2001.09.07



噢,對不起我用了這個標題,事實上如果我能做到10%,我就很高興了。因為我的桌上正放著一本Dan Appleman的書,它曾伴隨我許多年,也許你也有一本:1215頁,藍色書皮,機械工業出版社。英文名叫:《 Dan Appleman’s Visual Basic 5.0 Programmer’s Guide to the Win32 API 》。而我除了借用這個類似的名字之外,只是做了一下整理工作,不過這是一個不小的工作量(haha)



我把KERNEL32.DLL、USER32.DLL、GDI32.DLL、 ADVAPI32.DLL、SHELL32.DLL、SPOOLSS.DLL、WINMM.DLL的函數和聲明整理了一下,改用C#的語法重新改寫了一遍,整理出一個C#版本。這樣針對dotNET的Platform Invocation Services(PInVoke),你就可以直接使用這些Win32的API函數了。目前MS沒有公布整個的Win32API有多少可以在dotNET中使用,有多少不行。有些功能在dotNET中沒有對應的實現,那麼目前你可能還需要使用Win32的API函數。



結構和枚舉聲明放在一起,Kernel32.dll、User32.Dll、GDI32.dll分別放在3個cs文件中;剩下的Advapi32.dll、Shell32.dll、Spoolss.dll、Winmm.dll四個DLL的函數放在一個cs文件中,整個的namespace 起名叫Win32API.大致的構架應該象下面這樣:

namespace Win32API {



using System;

using System.Runtime.InteropServices;



先是所有的結構和枚舉聲明

class Kernel32 {….}

class User32 {….}

class GDI32 {….}

class Advapi32 {….}

class Shell32 {….}

class Spoolss {….}

class Winmm {….}

}



對應的生成下面的C#文件:

Structs.Net.cs

Kernel32.Net.cs

User32.Net.cs

GDI32.Net.cs

OtherFnc.Net.cs



然後編譯它們,這樣就可以使用它們了,我沒有計算5個文件包括的所有的准確個數,不過應該有百個結構和枚舉,上千個函數聲明吧。完成這些之後,現在最常用的MessageBox我可以這樣使用了:



using System ;

using Win32API;



public class TestWin32API

{

public static void Main()

{



int iRet ;

iRet = User32.MessageBox( 0, "Hello C# Win32 API" , "My Pinvoke", 0 ) ;

}

}



就在測試這個例子時發生了一件有趣的事,因為剛開始我的cs文件都沒有加NET的標識這樣很自然的就有了Kernel32.cs、 User32.cs等等,MessageBox是User32.DLL中的,而我編譯的User32.cs默認生成的也叫User32.DLL,當我執行這個測試程序時終於發生錯誤,我一直以為自己的聲明有問題,然後我用FrameworkSDK中的例子也還是出錯,直到我在其它的目錄中運行正常時,我才發現原來自己的DLL名和系統的DLL名完全一樣。然後就改成上面的那樣,不過很奇怪csc /t:exe /r:User32.dll TestWin32API.cs 的編譯指令居然沒有錯誤提示,真是可惡。提醒你不要也象我一樣。

惡夢也許還在後面,我還不知道真正的cs聲明中又有多少個錯誤,反正用到的時候再調試吧。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved