当前位置:编程学习 > C#/ASP.NET >>

大家不要相信有人吹的Paint.net是纯C#做,你下了源码看一下,有大量的非托管Dll的引用,大家还是好好学习C++吧!!

大家不要相信有人吹的Paint.net是纯C#+.Net做的,你下了源码看一下,有大量的非托管Dll的引用,也就是说,用纯.Net+C#并不能实现我们所要的功能.又听人说C#只相当于C++的70%的功能.
大家记不记得C#刚出来的时候,微软吹的说 C#具且VB的快速和具有C++的行动力,这句话一定把大家骗到现在..........呵呵..
大家还是好好学习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);

        [DllImport("SetupApi.dll", CharSet = CharSet.Unicode, SetLastError = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        internal static extern bool SetupDiDestroyDeviceInfoList(IntPtr DeviceInfoSet);

        [DllImport("SetupApi.dll", CharSet = CharSet.Unicode, SetLastError = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        internal static extern bool SetupDiEnumDeviceInfo(
            IntPtr DeviceInfoSet,
            uint MemberIndex,
            ref NativeStructs.SP_DEVINFO_DATA DeviceInfoData);

        [DllImport("SetupApi.dll", CharSet = CharSet.Unicode, SetLastError = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        internal static extern bool SetupDiGetDeviceInstanceIdW(
            IntPtr DeviceInfoSet,
            ref NativeStructs.SP_DEVINFO_DATA DeviceInfoData,
            IntPtr DeviceInstanceId,
            uint DeviceInstanceIdSize,
            out uint RequiredSize);

--------------------编程问答-------------------- sf 看热闹 --------------------编程问答-------------------- 还有人说,Paint.net相当于,Photoshop5.0,我晕
Photoshop的安装文件都那么大,功能那么多,Paint.net要是做来象
Photoshop那个大,一定是个只有大型计算机才能运行的家伙.........

--------------------编程问答-------------------- 同意,C、C++才是王道 --------------------编程问答-------------------- 看热闹来了 --------------------编程问答-------------------- C++不错的 --------------------编程问答-------------------- 呵呵。。学不好都一样的。。

同样,学得好也都一样的。。

c# or c++语言只对高高手来说才能凸显差异,像我这样的菜鸟学什么都一样。。

如果只停留在语言层次,学啥都是白搭。 --------------------编程问答-------------------- 这没有什么奇怪的.记得有人说过,凡是vb高手,都是com高手.其实真正的高手,语言已成为次要的. --------------------编程问答-------------------- 思维和算法才是核心 --------------------编程问答-------------------- 如果只停留在语言层次,学啥都是白搭。

------------
语言不重要,你就不要用C#调用C++写的Dll 类库嘛!!!!你直接用C#写,然后用C#编译器编译不就行了!!!!!!!!
--------------------编程问答-------------------- 无聊~ --------------------编程问答-------------------- 傻啊。 
C# 是用到c++,c了。怎么样。
最后C还不是要转换或者调用更低级的代码,
最后还不是1和0
,照楼主这么说直接用1 0 最牛。
但是有意义么。
--------------------编程问答-------------------- 这为什么不能算纯C#呢?分明都是C#语言嘛..

只不过是调用了几个系统的API,很正常啊...要知道,这是在WINDOWS平台上做的开发,调用几个系统接口还不是很正常的事. --------------------编程问答-------------------- 下载地址是什么 --------------------编程问答-------------------- 反正我没看到一行C++的代码,全是C#的! --------------------编程问答-------------------- 搜到了,不用了,谢谢 --------------------编程问答-------------------- 我感觉 C#window方面的开发不如C++灵活, 但是他的优点是快速, 而且 c# 还可以些写Asp.net --------------------编程问答-------------------- C#只相当于C++的70%的功能
------------------------
这句话没错,只不过那30%的功能大多都是直接和硬件打交道的,少数的如多重继承,也很少用到,要是开发和维护的费用一样,C#早就倒台了,问题是那些功能需要多少代价。
就我个人,更喜欢C和C#/Java的组合。 --------------------编程问答-------------------- 搞笑,你以为用C++就不调用API了?全部自己写累死你! --------------------编程问答-------------------- 这个家伙发了两贴了!!!
是不是该给他打上个人品问题的标签??? --------------------编程问答-------------------- 幽默 --------------------编程问答-------------------- 有意思吗! --------------------编程问答-------------------- 学习中 --------------------编程问答-------------------- 月经贴。
现在到别的论坛上争论什么问题时,有人要想贬低对方无知时,总是打比喻说,

“...就像在CSDN上,争论哪种语言好坏一样...”

我都替CSDN脸红。 --------------------编程问答-------------------- 问下LZ,纯C++能做什么?你真正从事过WIN32 NATIVE CODE的开发么?

VC的MFC是做什么的?里面包的是什么?STL可以操作DX么?

在WIN32平台上做开发,如果没有WIN32的API,你能做什么?

在某个平台上做开发,没有平台提供的API,不管你用什么语言,你什么都不能做!

用VC做开发,一样可能需要IMPORT DLL!这个和C#没有区别!

说白了都是搭积木,用API搭积木!

目前WINDOWS的API都是用C写的,这个也和C++没有关系,不要把C和C++扯在一起,这是两种东西!

适合写OS的还是C,不是C++

还有就是,不要把VC或者GNU C++当成C++,那是集成环境IDE!

作为语言来讲.C++只是工具,怎么运用工具,在于个人,也在于语言外部的平台和类库环境

要区分语言和环境!


--------------------编程问答-------------------- 同意楼上,正如作者自己所言:

如果只停留在语言层次,学啥都是白搭。

------------
语言不重要,你就不要用C#调用C++写的Dll 类库嘛!!!!你直接用C#写,然后用C#编译器编译不就行了!!!!!!!!

--------------------------------------
请问楼主,确认系统的dll都是c++所写吗?

否知道这种帖子有什么意思,只会影响初学的信念,对于高手,好像更多的是不屑多看。说多了。没有个人恩怨和私恨。有点公愤。呵呵,还有就是自己无聊,否则绝对不回帖给你。 --------------------编程问答-------------------- 楼主,你要挂了,这么多的抨击你哦。。。 --------------------编程问答-------------------- hehe  看看热闹 --------------------编程问答-------------------- 晕头 --------------------编程问答-------------------- c#也可以写成dll啊,并且在和以前用c++写的dll已有本质的区别,但是调用dll的方法确实一样的,你就确定那是用c++写的吗 --------------------编程问答-------------------- 请问楼主,确认系统的dll都是c++所写吗?
-----你是外星人吗,dll是C/C++写的都不知道,要不要看windows源码啊 --------------------编程问答-------------------- shell32.dll, kernel32.dll
这些很明显的是系统API,好像并不意味着用C++编写了什么东西吧。

难道用C++编程序就不需要调用系统API了? --------------------编程问答-------------------- shell32

用c++也是一样调用了. --------------------编程问答-------------------- up --------------------编程问答-------------------- 楼主没用C#吧?这只是引用系统的API函数,没什么呀,


我C++也用,C#也用,十八样兵器都会用,都不精

C++相比较而言的好处就是直接通过头文件引用了系统API,不像C#这样还这么麻烦,因为API就是C++写的呀 --------------------编程问答-------------------- 调用了,性能还那么的差!@?????????????????????????????????????????/ --------------------编程问答-------------------- C++一样可以进行网页开发啊 --------------------编程问答-------------------- C#只相当于C++的70%的功能
---------------------------
貌似C#的许多功能C++也没有吧
各种语言有各自的优点,也有自己的鸡肋
不要一帮子把某个语言打死 --------------------编程问答-------------------- 呵呵,没啥补充了.

偶只想说,偶也没打算过要写Paint.net呀. --------------------编程问答-------------------- 没办法...VC没找到工作,就C#了

感觉在调用本地API上C#是够麻烦的...

还是VC里面省事儿.. --------------------编程问答-------------------- 只是软件复用得结果而已
没有什么好讨论的
系统API 大部分是C 和汇编 
没有C++的事
你见过
系统有类库吗
只是 API 函数
--------------------编程问答-------------------- C++必败于C#和C
低层必然使用C,高层必然使用C#、JAVA动态编译的语言。
对于楼主我感到很无语,Paint.net要的是性能,那么需要使用SEE,MMX等CPU加速指令,因此才使用C

对是C++我认为是一门垃圾语言,
也是处于无赖之举,新技术没有出来,C又很难应付大型工程。

C#现在除了性能不如C++以外,还有不能直接使用汇编,但是C#可以跨平台,在MONO的C#实现版本中可以使用SEE、MMX等加速,你确不用学习汇编,使用简单。

动态编译的语言有能力超过静态编译的程序比如C++,虽然现在没有超过,但灵活度太大了,动态编译会根据不同的CPU进行优化。

另外新的技术OpenCL出来了,处理图像等多媒体信息,很可能不会再使用MMX,SSE等技术,就像OpenGL一样与语言无关性。到时候彻底摆脱性能差别。大别要的只是开发速度,性能通过硬件全面解决。 --------------------编程问答--------------------

我用VB.NET写的.速度和它差不多.用了几个API.不可以?用了API就不是.NET写的了? --------------------编程问答-------------------- lz去啃asm吧 --------------------编程问答-------------------- LZ纯属找抽。。不予评论 --------------------编程问答--------------------
引用 43 楼 chrisak 的回复:
lz去啃asm吧

呵呵,还有1、0呢 --------------------编程问答-------------------- 看热闹看热闹 --------------------编程问答-------------------- 鄙视,半桶水响叮当 --------------------编程问答-------------------- 正常,没事找事。 --------------------编程问答-------------------- Paint.net 效率不高,而且一个好好的BMP被它一存就变大。 --------------------编程问答--------------------
引用 12 楼 brucenan999 的回复:
这为什么不能算纯C#呢?分明都是C#语言嘛..

只不过是调用了几个系统的API,很正常啊...要知道,这是在WINDOWS平台上做的开发,调用几个系统接口还不是很正常的事.


确实,这不是自己的动态库,系统动态库,调用是必须的!!!!! --------------------编程问答--------------------
引用楼主 zjh222 的回复:
大家还是好好学习C++吧!!,


其实可以以其人之道还治其人之身:你用c++做一个Pain.Net然后再来比比哪一个开发效率更高吧!

只不过我觉得这样比较残忍,所以很少这样说。其实你做c++,那么就老老实实地去埋头钻研那越来越少的一点功能,好让别人可以调用你的功能。 --------------------编程问答-------------------- 我们找驱动级或者加密等底层开发人员,不再找c++程序员,只找c程序员而已。这是个事实,c++程序员真的高不成低不就地了。 --------------------编程问答--------------------
引用 7 楼 lnwuyaowei 的回复:
这没有什么奇怪的.记得有人说过,凡是vb高手,都是com高手.其实真正的高手,语言已成为次要的.


在上个世纪90年代中期以前,vb高手遇到了底层问题大多就会用汇编来解决,而c++高手遇到了底层问题大多会用c来解决。

不过今天,.net程序员遇到底层问题会调用使用标准c风格语法封装的dll就可以了。 --------------------编程问答-------------------- lz瓜娃子,人家掉操作系统win32api,难道你都不让人掉吗? --------------------编程问答-------------------- 必须的,这个可以有。

莫非调用user32.sys? --------------------编程问答-------------------- 必须调用user32.sys --------------------编程问答-------------------- 挖坟者,请自重 --------------------编程问答-------------------- 不好意思,没看时间 --------------------编程问答-------------------- 我靠,考古贴呀。 --------------------编程问答--------------------
引用 18 楼  的回复:
搞笑,你以为用C++就不调用API了?全部自己写累死你!

是啊,C++调用的API更多。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,