麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > .NET > 正文

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

2024-07-21 02:27:59
字體:
來源:轉載
供稿:網友
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


中國最大的web開發資源網站及技術社區,
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 久久艳片 | 国产成人网| 国产精品久久久久久久久久 | 国产成人自拍视频在线 | 欧产日产国产精品v | 国产成人av在线 | 久久成人视屏 | 九九热精品视频在线 | 精品久久久久久久久亚洲 | 成人在线视频播放 | 亚洲3atv精品一区二区三区 | 国产精品久久久久久久午夜片 | 全免费午夜一级毛片真人 | 91亚洲免费视频 | 色网站在线免费观看 | 草莓福利社区在线 | 欧美高清在线精品一区二区不卡 | 一级免费a | 国产免费久久久久 | 成人黄视频在线观看 | 九九热在线免费观看视频 | 在线观看免费毛片视频 | 久久久久久艹 | 欧美日韩亚洲在线观看 | 日韩色视频 | 成人午夜网址 | 久久视频精品 | 91精品国产91久久久久久吃药 | 国产一区二区免费在线观看视频 | 羞羞视频免费网站 | h视频免费看 | 少妇一级淫片高潮流水电影 | 色综合视频网 | 中国av中文字幕 | 亚州欧美视频 | 中文字幕在线第二页 | av电影在线免费 | 亚洲天堂中文字幕在线观看 | 久久影院一区二区三区 | 国产人成免费爽爽爽视频 | 免费网站看毛片 |