人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當前位置:蘿卜系統下載站 > 技術開發教程 > 詳細頁面

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

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

更新時間:2022-06-25 文章作者:未知 信息來源:網絡 閱讀次數:

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聲明中又有多少個錯誤,反正用到的時候再調試吧。因為太多了所以不可能全都測試,也不敢一個個的測試,只希望自己這些整理能起到拋磚引玉的作用,如果以后你有新的版本,不要忘了Mail一份給我。



附帶的Zip包中有所有cs的源碼,我在Framework SDK Beta2 下都編譯通過。

Windows 2000 ADV Server SP2 EN

Visual C# Compiler Version 7.00.9254

CLR version v1.0.2914

你可以根據你的情況進行編譯(要先編譯Structs.NET.cs,因為其它的都要/r:Structs.NET.DLL)或者使用二進制的DLL。dotnet的編譯技術很好,5個DLL加起來才100多K。



下面是一下源碼的節選:



--------------------------------------------------------------------------------


// Write by ccBoy

// Date: 2001.09.07

// csc /t:library /r:System.dll Structs.NET.cs

// csc /t:library /r:Structs.NET.dll Kernel32.NET.cs

// Emeditor 3.14



namespace Win32API {



using System;

using System.Runtime.InteropServices;



[StructLayout (LayoutKind.Sequential)]

public class ABC {

public int abcA;

public int abcB;

public int abcC;

}



[StructLayout (LayoutKind.Sequential)]

public class ABCFLOAT {

public float abcfA;

public float abcfB;

public float abcfC;

}



public Class Kerne

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

網站地圖xml | 網站地圖html
主站蜘蛛池模板: 灵璧县| 丰原市| 包头市| 孟津县| 海口市| 玛多县| 大安市| 缙云县| 登封市| 巢湖市| 曲周县| 景泰县| 名山县| 翁源县| 凤台县| 沙田区| 合川市| 永吉县| 达日县| 龙泉市| 遂平县| 贵德县| 徐汇区| 陆川县| 车险| 沛县| 清丰县| 吉隆县| 大兴区| 神木县| 泽州县| 金湖县| 安新县| 龙海市| 枣阳市| 凤凰县| 奉新县| 桦甸市| 斗六市| 定远县| 新竹县|