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

首頁 > 編程 > .NET > 正文

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

2024-07-21 02:27:59
字體:
供稿:網(wǎng)友
dotnet c# programmer’s guide to the win32 api (win32 api 聲明c#版)



小氣的神 2001.09.07



噢,對不起我用了這個(gè)標(biāo)題,事實(shí)上如果我能做到10%,我就很高興了。因?yàn)槲业淖郎险胖槐綿an appleman的書,它曾伴隨我許多年,也許你也有一本:1215頁,藍(lán)色書皮,機(jī)械工業(yè)出版社。英文名叫:《 dan appleman’s visual basic 5.0 programmer’s guide to the win32 api 》。而我除了借用這個(gè)類似的名字之外,只是做了一下整理工作,不過這是一個(gè)不小的工作量(haha)



我把kernel32.dll、user32.dll、gdi32.dll、 advapi32.dll、shell32.dll、spoolss.dll、winmm.dll的函數(shù)和聲明整理了一下,改用c#的語法重新改寫了一遍,整理出一個(gè)c#版本。這樣針對dotnet的platform invocation services(pinvoke),你就可以直接使用這些win32的api函數(shù)了。目前ms沒有公布整個(gè)的win32api有多少可以在dotnet中使用,有多少不行。有些功能在dotnet中沒有對應(yīng)的實(shí)現(xiàn),那么目前你可能還需要使用win32的api函數(shù)。



結(jié)構(gòu)和枚舉聲明放在一起,kernel32.dll、user32.dll、gdi32.dll分別放在3個(gè)cs文件中;剩下的advapi32.dll、shell32.dll、spoolss.dll、winmm.dll四個(gè)dll的函數(shù)放在一個(gè)cs文件中,整個(gè)的namespace 起名叫win32api.大致的構(gòu)架應(yīng)該象下面這樣:

namespace win32api {



using system;

using system.runtime.interopservices;



先是所有的結(jié)構(gòu)和枚舉聲明

class kernel32 {….}

class user32 {….}

class gdi32 {….}

class advapi32 {….}

class shell32 {….}

class spoolss {….}

class winmm {….}

}



對應(yīng)的生成下面的c#文件:

structs.net.cs

kernel32.net.cs

user32.net.cs

gdi32.net.cs

otherfnc.net.cs



然后編譯它們,這樣就可以使用它們了,我沒有計(jì)算5個(gè)文件包括的所有的準(zhǔn)確個(gè)數(shù),不過應(yīng)該有百個(gè)結(jié)構(gòu)和枚舉,上千個(gè)函數(shù)聲明吧。完成這些之后,現(xiàn)在最常用的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 ) ;

}

}



就在測試這個(gè)例子時(shí)發(fā)生了一件有趣的事,因?yàn)閯傞_始我的cs文件都沒有加net的標(biāo)識(shí)這樣很自然的就有了kernel32.cs、 user32.cs等等,messagebox是user32.dll中的,而我編譯的user32.cs默認(rèn)生成的也叫user32.dll,當(dāng)我執(zhí)行這個(gè)測試程序時(shí)終于發(fā)生錯(cuò)誤,我一直以為自己的聲明有問題,然后我用frameworksdk中的例子也還是出錯(cuò),直到我在其它的目錄中運(yùn)行正常時(shí),我才發(fā)現(xiàn)原來自己的dll名和系統(tǒng)的dll名完全一樣。然后就改成上面的那樣,不過很奇怪csc /t:exe /r:user32.dll testwin32api.cs 的編譯指令居然沒有錯(cuò)誤提示,真是可惡。提醒你不要也象我一樣。

惡夢也許還在后面,我還不知道真正的cs聲明中又有多少個(gè)錯(cuò)誤,反正用到的時(shí)候再調(diào)試吧。因?yàn)樘嗔怂圆豢赡苋紲y試,也不敢一個(gè)個(gè)的測試,只希望自己這些整理能起到拋磚引玉的作用,如果以后你有新的版本,不要忘了mail一份給我。



附帶的zip包中有所有cs的源碼,我在framework sdk beta2 下都編譯通過。

windows 2000 adv server sp2 en

visual c# compiler version 7.00.9254

clr version v1.0.2914

你可以根據(jù)你的情況進(jìn)行編譯(要先編譯structs.net.cs,因?yàn)槠渌亩家?r:structs.net.dll)或者使用二進(jìn)制的dll。dotnet的編譯技術(shù)很好,5個(gè)dll加起來才100多k。



下面是一下源碼的節(jié)選:



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


// 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


中國最大的web開發(fā)資源網(wǎng)站及技術(shù)社區(qū),
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 富源县| 周至县| 洛浦县| 蒙自县| 吴忠市| 太保市| 衡山县| 鱼台县| 通江县| 邯郸县| 卫辉市| 贺兰县| 阿尔山市| 奉节县| 三原县| 邢台市| 南川市| 疏勒县| 陇南市| 当雄县| 东乡| 九龙坡区| 子洲县| 淮安市| 鞍山市| 永平县| 古田县| 丁青县| 抚松县| 始兴县| 赞皇县| 东阿县| 城固县| 安龙县| 英吉沙县| 股票| 灵宝市| 深州市| 凤凰县| 托克逊县| 丹寨县|