大家不要相信有人吹的Paint.net是纯C#+.Net做的,你下了源码看一下,有大量的非托管Dll的引用,也就是说,用纯.Net+C#并不能实现我们所要的功能.又听人说C#只相当于C++的70%的功能.
大家记不记得C#刚出来的时候,微软吹的说 C#具且VB的快速和具有C++的行动力,这句话一定把大家骗到现在..........呵呵.. 还有人说,Paint.net相当于,Photoshop5.0,我晕
Photoshop的安装文件都那么大,功能那么多,Paint.net要是做来象
Photoshop那个大,一定是个只有大型计算机才能运行的家伙......
大家还是好好学习C++吧!!,
我复制了部分[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool OpenClipboard(IntPtr hWndNewOwner);[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool CloseClipboard();[DllImport("user32.dll", SetLastError = true)]
public static extern IntPtr GetClipboardData(uint format);[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool IsClipboardFormatAvailable(uint format);[DllImport("shell32.dll", CharSet = CharSet.Unicode, PreserveSig = false)]
internal static extern void SHCreateItemFromParsingName(
[MarshalAs(UnmanagedType.LPWStr)] string pszPath,
IntPtr pbc,
ref Guid riid,
out IntPtr ppv);[DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
internal static extern bool VerifyVersionInfo(
ref NativeStructs.OSVERSIONINFOEX lpVersionInfo,
uint dwTypeMask,
ulong dwlConditionMask);[DllImport("kernel32.dll")]
internal static extern ulong VerSetConditionMask(
ulong dwlConditionMask,
uint dwTypeBitMask,
byte dwConditionMask);[DllImport("kernel32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
internal static extern bool DeviceIoControl(
IntPtr hDevice,
uint dwIoControlCode,
IntPtr lpInBuffer,
uint nInBufferSize,
IntPtr lpOutBuffer,
uint nOutBufferSize,
ref uint lpBytesReturned,
IntPtr lpOverlapped);[DllImport("shell32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
internal static extern bool ShellExecuteExW(ref NativeStructs.SHELLEXECUTEINFO lpExecInfo);[DllImport("kernel32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
internal static extern bool GlobalMemoryStatusEx(ref NativeStructs.MEMORYSTATUSEX lpBuffer);[DllImport("shell32.dll", SetLastError = false)]
internal static extern void SHAddToRecentDocs(uint uFlags, IntPtr pv);[DllImport("kernel32.dll", SetLastError = false)]
internal static extern void GetSystemInfo(ref NativeStructs.SYSTEM_INFO lpSystemInfo);[DllImport("kernel32.dll", SetLastError = false)]
internal static extern void GetNativeSystemInfo(ref NativeStructs.SYSTEM_INFO lpSystemInfo);[DllImport("Wintrust.dll", PreserveSig = true, SetLastError = false)]
internal extern static unsafe int WinVerifyTrust(
IntPtr hWnd,
ref Guid pgActionID,
ref NativeStructs.WINTRUST_DATA pWinTrustData
);[DllImport("SetupApi.dll", CharSet = CharSet.Unicode, SetLastError = true)]
internal static extern IntPtr SetupDiGetClassDevsW(
ref Guid ClassGuid,
[MarshalAs(UnmanagedType.LPWStr)] string Enumerator,
IntPtr hwndParent,
uint Flags);

解决方案 »

  1.   

    什么样的程序才是纯C# + .NET?不使用API吗?但.NET内核还不是使用API
      

  2.   

    纯.net就不调用api了?
    .net framework只是把api封装了起来,并不是完全脱离api。
      

  3.   

    用.net开发并不一定要摒弃win32api,framework本身也是对win32api的有设计模式地封装
      

  4.   

    为什么不进行完全封装呢?那.Net的优势在那里呢??是方便吗?调用API方便了吗/那还不如直接用C++算了
      

  5.   

    不见得LZ的预见性比微软的智囊团要高,LZ真的那么厉害就去微软干吧,叫他们废了.net
      

  6.   

    语言应该互通才是,比如C++写的DLL可以在.NET里调用.
    有些功能实现C#的确会比C++差点.说.NET优势在哪里,我就奇怪了C++.NET到底是什么,难道不能解决一些问题吗???
    如果调用API也说是麻烦.不方便,用C++,那么软件的世界就很可怕了,因为以后的软件应该更智能化,业务流程越来越复杂,如果用一个开发效率极低的来开发,那么使用的人力物力,哎!不可想象!!
      

  7.   

    @sunzhong2003()
    我说的是调了API是因为它调用了非托管代码.
    .Net不是称为托管代码吗??不是说具C++的行动力吗?(微软广告语)
    那为什么有些功能却要用非托管的而不全用托管的代码呢?
      

  8.   

    C#+.Net 是什么?
    因为调用了非托管代码就不是纯的了?楼主是这个意思?我只想说楼主很欠抽啊~~你这么说就像``用Windows的就不准用除了IE之外的浏览器一样``
      

  9.   

    LZ很奇怪,为什么API里面已经实现的东西非要用.NET再写一遍???
    我想问问LZ,除了调用API之外。还有哪里是用C++给写出来的??
    如果有,那你就是对的,如果没有,那就哪儿凉快你哪儿呆去。不要在这里胡扯!!
      

  10.   

    Win32 APIs are C, not C++.Make it clear...And we say a program is writen in one kind of language means that the key logic flow is implemented by that language.Like we say Windows is writen in C++, but in fact, some key codes are in ASM.Because Windows in writen in C++, so if you want to interact with Windows OS, u MUST use C++ in some situation.
      

  11.   

    .net的精髓是更好的架构,更易于开发的业务逻辑。
    具体一个功能块是用.net系统库,第三方库,C/C++ DLL或是别的实现是不重要的。
      

  12.   

    在Windows下开发基本都是以API为基础的,不论语言。
    简单的说,只要是有窗口的应用程序基本上就一定用API,即使用C++,难道就说这个程序不是C++写的?
      

  13.   

    剪贴板这样的操作为什么要用api?Paint.Net的源码看过。貌似鬼佬都不是很感冒GDI+,图形方面倒是大量的使用GDI方法,所以用到很多的dllImport。但其他的应该不需要吧。可能我用.net不精,我一般是这样,.如果gdi+实现不了,一定要用gdi,我就用,比如异或笔。如果可以用.net实现,尽量不用api,就算用unsafe关键字,我也尽量的避免直接用api,到不是别的,是担心日后别人维护太麻烦,看的乱。
      

  14.   

    楼主也是三个裤衩了,如果没有低估楼主的话,一些道理应该想得明白API = Application Programming Interface(应用程序接口)API是操作系统(包括UNIX等)提供给应用程序访问资源(包括文件、内存、进程等等)用的接口就是说API是应用程序和操作系统间的桥梁(硬件-(硬件接口)-操作系统-(API)-应用程序)具我所知:除非自己写操作系统,否则写应用程序最终是离不开API调用的程序开发的工作就是提高人的工作效率,减少人们的重复劳动.NET和早期的VCL、MFC等,都是为了避免繁琐和重复的API调用简单的说:工具这东西自己用得顺手就可以了,觉得好用也不必当神仙顶礼膜拜真想掌握计算机所有细节,那么我推荐使用机器语言,汇编都逊一点
      

  15.   

    Microsoft Expression Design就很小,这个才是和Photoshop一个级别的。
      

  16.   

    @wzd24(牧野)(衣带渐宽终不悔,为伊消得人憔悴) 
    @spkl1(柏芝你走吧我放不下韩红就叫我朝伟吧虽然歌唱得微软不是在包装MFC和API为.Net吗??为什么有些API不包装完整呢??学了C#还要去了解C++
    包装不完整就不要包装,也不要花钱,让人们去用熟悉的MFC,API......@waterine(waterine) 
    .Net的架构的目的,不就是要统一类库吗/?
      

  17.   

    大家再用一下Paint.net的功能.我机子Cpu3 RAM1.5G,磁盘80G
    如发光,呀,我才62K大小的图片,搞得象动画一下,慢慢地变化
    还有再试一下轮廓,呀也是象动画一样,慢慢地从上往下变
    有人说没有经过优化,难道有微软的参与指导,优化不好吗/?
    再试一下Photoshop5.0那才叫快,,呵呵....
    事实胜于雄辨哈
      

  18.   

    Paint.net是C#写出来的,不过又怎么样呢,Paint.net本身甚至不能作为一个商业软件拿出去卖,因为根本卖不出去。更不要拿它和PHOTOSHOP比,要比就拿它和WINDOWS的画图软件比。
      

  19.   

    windows的所有程序没有不用win API的,java也好,。net也好,vb也罢,vc也一样,
    90%的东西,最终还是调了api。
      

  20.   

    c#最终应定位与WEB开发,跟java一样.其他免谈。
      

  21.   

    paint.net 速度是比较慢,而且内存占用很大
      

  22.   

    其实楼主想说的是...一些精英写出来的Paint.net... 效果都这么差. 所以要想用C#写个很有效率的东西是比较难的.我感觉也是......
    .net的方向在于WEB方面吧... 
    C#好像写不出全局钩子吧..........除了两个特殊的.... 不知道哪位大人会写,可能我水平差..net的目的就是快速开发, 让人变傻瓜... 这样的结果就是...是个人都能做程序员. 关键是低级的还是高级的.  也导致了IT民工的产生, 低廉的劳动力.....
    有些问题还真只有C/C++解决的.....但也不是否定C#. C#本来的目的就不在于此
      

  23.   

    不是一种语言怎么样区别在于用的人据说 Gates曾经(在某个年代)说能用basic实现任何东西。
      

  24.   

    TO:csharpstudy()
    你干嘛不鼓励去写01代码,这样写程序的就不会变成傻瓜了,而要变机器人了
    把编码难道降低,让人更多地去考虑其它问题了,难道不好?
      

  25.   

    托管代码的效率还是要低一些的, 不太适合做那些有高强度算法的程序. 还是做ADO,界面这些比较适合它, 而且C#对设计模式的封装也不错的. 还是专物专用比较好.
      

  26.   

    没看到paint.net中用了汇编吗..... 讲究效率...就是用了也不快...
      

  27.   

    我看到标题也吓了一跳。呵呵,应用程序如果不调用API,那真的叫神了。
      

  28.   

    C#你也可以写非托管代码的啊,所谓的不安全代码,不过这的确不它的强项C#的执行效率理论上不会比JAVA差,你怎么不去说下JAVA?二者的都是在一个中间层上运行,不同的是JAVA运行的虚拟机上,虚拟机也是要把JAVA的字节码翻成机器码的.... .net的IL也是要翻译成CPU指令.打个比方:
    public class test{
        static void main(){
            Console.WriteLine("Hello");
            Console.WriteLine("World!");
        }
    }当第一次执行到Console.WriteLine时,它会去搜索元数据中这个方法的IL,并翻译成CPU指令.当下次再看到同样的指令时,它是不会再去翻译的,而且直接去内存找以前翻译过的CPU代码执行...想想要在一个流量很大的系统(例如服务端程序),这里常常要执行重复的操作(如:多线程),这处和非托管程序性能那个高些?再说了,非托管代码又不是就只有C#一种,干嘛对它有偏见?
      

  29.   

    pain.net若作为一个商业产品,无疑是相当的失败的。没见过哪一个商业化产品要就客户机器安装framework的。其所有功能C++都可以轻松实现。
      

  30.   

    我们公司就卖商业软件,就要求用户安装.NET。反正都用InstallAware打包到Setup.exe里面,用户安装也只管下一步就好了。
      

  31.   

    楼上...你这个挖坟动作“无疑是相当的失败的”...没见过哪一个商业化产品要就客户机器安装framework的。其所有功能C++都可以轻松实现。
    -------------------------
    1.难道你不知道C++也要运行时环境支持?只不过现在的操作系统已经预装了而已...至于预装.NET Framework...你没用过Vista或Server 2008?就算是Server 2003 .NET 1.1应用也不需要安装...
    2..NET是能和C++比的吗?要比较也只有J2EE...
    3.轻松实现?你不知道.NET开发一个商业应用C++要花数倍甚至数十倍的代价?
    4.需要安装运行时环境就叫“失败”?那我可以告诉你天下最“失败”的就是Java和Oracle...99%的商业产品都很“失败”...见识少没关系可以学但不要乱下结论...ps:这两天挖坟党出没翻出不少老帖啊...呵呵
      

  32.   

    -_-! lextm XD半路插一道...“楼上”不是说你...是你楼上...
      

  33.   

    .Net确实比C++方便很多, 开发速度也快很多, 而且.Net frameWork也并不是很大.
    JAVA的JVM也并不大. 就是Java本身的运行速度太满了.
    我相信未来几年内, XP和Vista很多小软件都是C#做得了.不过很多核心的软件, 大的软件, 比如还是C++做的, 那些东西不是因为方便就能开发得出来的, 连C#的编译器都是C++做得. 其他的还扯什么啊.
      

  34.   

    photoshop还是paint.net不在于语方。而是算法。
    楼主还有待于学习。
      

  35.   

    现在来看还是VC效率高啊!期待微软未来的系统底层会用.net开发哈哈(MS那是不可能的,有CLR的话貌似.net的效率高不了)还有53楼的头像晕死了!
      

  36.   

    C#慢主要是还有一层中间翻译,就像解释语言一样,不可否认C/C++执行效率是很高,要不然操作系统能用它们来写吗?
      

  37.   

    在现在的硬件配置都很好的情况下,开发一般的应用用C#开发效率是很高的,但有些场合下,对性能要求高的场合下,还是需要C/C++的,就像汇编也没有被淘汰一样,只是在大多应用程序中“被淘汰”,
    目前来看VC“被淘汰”只少还需要好几年,
      

  38.   

    VC除了桌面应用界面上开发“慢”之外,其它的效率,我感觉还是挺高的,像3D游戏啦,
    不过,如果你积累了很多的桌面的类的话,下次再用时你不就可以不用重写了?
      

  39.   

    不是无聊才来的,是遇到一问题 了,就是 [return: MarshalAs(UnmanagedType.Bool)]
    这个格式没有见到过。
      

  40.   

    楼主应该认真看看win32程序设计。api是操作系统提供的,不是vc,c++之类的。
    顺便提醒一下Paint.net官网下载的带有病毒。
    也看了一下Paint.net效率极差。photoshop里面很多不是gdi。用gdi很多是没办法实现的。
      

  41.   

    Paint.NET那运行效率绝对不是吹的
    我学.NET不久就听说这个了,下了个试了一下。安装程序就卡得我死去活来,装上后更卡得完全没法用
    PS吗,至少我当时的机子用PS7.0还是很流畅的