ASP.NET编程:dotNET C# Programmer’s Guide to the...
我实在想不明白java的机制,为什么非要那么蛋疼,在同一个平台下重复编译。dotNETC#Programmer’sGuidetotheWin32API(Win32API声明C#版)吝啬的神2001.09.07
噢,对不起我用了这个题目,现实上假如我能做到10%,我就很乐意了。由于我的桌上正放着一本DanAppleman的书,它曾陪伴我很多年,大概你也有一本:1215页,蓝色书皮,机器产业出书社。英文名叫:《DanAppleman’sVisualBasic5.0Programmer’sGuidetotheWin32API》。而我除借用这个相似的名字以外,只是做了一下收拾事情,不外这是一个不小的事情量(haha)
我把KERNEL32.DLL、USER32.DLL、GDI32.DLL、ADVAPI32.DLL、SHELL32.DLL、SPOOLSS.DLL、WINMM.DLL的函数和声明收拾了一下,改用C#的语法从头改写了一遍,收拾出一个C#版本。如许针对dotNET的PlatformInvocationServices(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.大抵的构架应当象上面如许:
namespaceWin32API{
usingSystem;
usingSystem.Runtime.InteropServices;
先是一切的布局和列举声明
classKernel32{….}
classUser32{….}
classGDI32{….}
classAdvapi32{….}
classShell32{….}
classSpoolss{….}
classWinmm{….}
}
对应的天生上面的C#文件:
Structs.NET.cs
Kernel32.NET.cs
User32.NET.cs
GDI32.NET.cs
OtherFnc.NET.cs
然后编译它们,如许就能够利用它们了,我没有盘算5个文件包含的一切的正确个数,不外应当有百个布局和列举,上千个函数声明吧。完成这些以后,如今最经常使用的MessageBox我能够如许利用了:
usingSystem;
usingWin32API;
publicclassTestWin32API
{
publicstaticvoidMain()
{
intiRet;
iRet=User32.MessageBox(0,"HelloC#Win32API","MyPinvoke",0);
}
}
就在测试这个例子时产生了一件风趣的事,由于刚入手下手我的cs文件都没有加NET的标识如许很天然的就有了Kernel32.cs、User32.cs等等,MessageBox是User32.DLL中的,而我编译的User32.cs默许天生的也叫User32.DLL,当我实行这个测试程序时终究产生毛病,我一向觉得本人的声明有成绩,然后我用FrameworkSDK中的例子也仍是堕落,直到我在别的的目次中运转一般时,我才发明本来本人的DLL名和体系的DLL名完整一样。然后就改成下面的那样,不外很奇异csc/t:exe/r:User32.dllTestWin32API.cs的编译指令竟然没有毛病提醒,真是可爱。提示你不要也象我一样。
噩梦大概还在前面,我还不晓得真实的cs声明中又有几个毛病,归正用到的时分再调试吧。由于太多了以是不成能全都测试,也不敢一个个的测试,只但愿本人这些收拾能起到举一反三的感化,假如今后你有新的版本,不要忘了Mail一份给我。
附带的Zip包中有一切cs的源码,我在FrameworkSDKBeta2下都编译经由过程。
Windows2000ADVServerSP2EN
VisualC#CompilerVersion7.00.9254
CLRversionv1.0.2914
你能够依据你的情形举行编译(要先编译Structs.NET.cs,由于别的的都要/r:Structs.NET.DLL)大概利用二进制的DLL。dotnet的编译手艺很好,5个DLL加起来才100多K。
上面是一下源码的节选:
--------------------------------------------------------------------------------
//WritebyccBoy
//Date:2001.09.07
//csc/t:library/r:System.dllStructs.NET.cs
//csc/t:library/r:Structs.NET.dllKernel32.NET.cs
//Emeditor3.14
namespaceWin32API{
usingSystem;
usingSystem.Runtime.InteropServices;
publicclassABC{
publicintabcA;
publicintabcB;
publicintabcC;
}
publicclassABCFLOAT{
publicfloatabcfA;
publicfloatabcfB;
publicfloatabcfC;
}
publicClassKerne
http://www.ckuyun.com/
无论谁倒了对双方阵营的粉丝们也是有害无益。 代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。 ASP.net1.1和2.0在程序上的语法也有很大不同,现在2.0属于新出来的,不知道半年后会不会有3.0(说笑一下)。Windows2003系统自动支持ASP和ASP.net环境,不用安装任何程序。Asp.net属于编译语言。ASP的最大不同(ASP属于解释语言)。 Servlet却在响应第一个请求的时候被载入,一旦Servlet被载入,便处于已执行状态。对于以后其他用户的请求,它并不打开进程,而是打开一个线程(Thread),将结果发送给客户。由于线程与线程之间可以通过生成自己的父线程(ParentThread)来实现资源共享,这样就减轻了服务器的负担,所以,JavaServlet可以用来做大规模的应用服务。 但是java靠开源打出的一片天地,特别是在微软的垄断下能打开今天的局面还是有它的生命力的。 CGI程序在运行的时候,首先是客户向服务器上的CGI程序发送一个请求,服务器接收到客户的请求后,就会打开一个新的Process(进程)来执行CGI程序,处理客户的请求。CGI程序最后将执行的结果(HTML页面代码)传回给客户。 关于ASP.NET功能上,ASP.NET比微软以前的ASP(96年出现)有更强大的library,更好的稳定性。ASP.NET可以使用.NETFramework中所有组件(也就是说.NET能实现的,ASP.NET一样能实现)。 关于ASP.NET功能上,ASP.NET比微软以前的ASP(96年出现)有更强大的library,更好的稳定性。ASP.NET可以使用.NETFramework中所有组件(也就是说.NET能实现的,ASP.NET一样能实现)。
页:
[1]