国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

dotNET C# Programmer's Guide to the Win32 API (Win

2024-07-21 02:20:10
字體:
來源:轉載
供稿:網友
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 kernel32 {
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宜兴市| 定南县| 宁远县| 分宜县| 信宜市| 新乡市| 曲周县| 理塘县| 民权县| 晴隆县| 葵青区| 大名县| 青海省| 南召县| 襄垣县| 同仁县| 郑州市| 北流市| 大余县| 东乌珠穆沁旗| 虹口区| 宁晋县| 张家川| 南召县| 洛川县| 平乡县| 海盐县| 阳西县| 靖宇县| 日照市| 衡阳县| 安乡县| 玉环县| 无为县| 浏阳市| 洮南市| 厦门市| 利川市| 靖边县| 凤城市| 宁晋县|