C# 针对硬核Java guy的Windows开发

C# 针对硬核Java guy的Windows开发,c#,java,visual-studio,winapi,C#,Java,Visual Studio,Winapi,我有点不好意思问这个问题,因为,你知道,我很长时间以来都非常反对MS。我很幸运能在Visual Studio之外谋生。随着我年龄的增长,我想尝试“一些”东西,说实话,这个问答网站启发了我,我意识到VS和Windows开发并没有那么糟糕。嘿,毕竟C#是在Java之后设计的,现在Java正在从子语言复制一些特性。Windows vista是Windows面世以来第一个像样的版本 无论如何,对于观众中的任何+3000用户,您可以删除所有上述垃圾并保留以下内容: 你有没有链接、资源和教程来学习来自强大J

我有点不好意思问这个问题,因为,你知道,我很长时间以来都非常反对MS。我很幸运能在Visual Studio之外谋生。随着我年龄的增长,我想尝试“一些”东西,说实话,这个问答网站启发了我,我意识到VS和Windows开发并没有那么糟糕。嘿,毕竟C#是在Java之后设计的,现在Java正在从子语言复制一些特性。Windows vista是Windows面世以来第一个像样的版本

无论如何,对于观众中的任何+3000用户,您可以删除所有上述垃圾并保留以下内容:

你有没有链接、资源和教程来学习来自强大Java背景的Windows开发

我对Windows操作(即实际的窗口、框架、获取名称、获取最重要的应用程序等、以编程方式调整其大小等)和Windows搜索API以及其他次要API非常感兴趣。毕竟,我的兴趣是通过JNI或JNA将它们与我的Java应用程序集成

我已经阅读了MSDN上的许多教程和链接,实际上我自己也理解API。我已经抓取了一份C和C++快件,实际上有一些基本的样本正在运行。p> 我的问题是,我不了解整个体系结构的大局(因为,嗯,它是大的)。这些类有数百个方法,我不清楚是谁调用它们。(当我第一次看到Java的JavaDocAPI时,我有同样的观点。)我不知道一些基本的公共对象,例如
HWCD
(或类似的东西),它原来就是一个窗口处理程序,但我读的每一篇教程都理所当然地给出了这个名称(好像
WHCD
或它是什么,都是一个非常描述性的名称).

我不知道Win32、COM、COM+、DCOM、Windows SDK ADO和其他一些技术之间的确切区别。我的意思是,我在某种程度上和常识上了解它们,但在阅读教程或API时,我感到困惑。我曾试图获取一些“初学者”教程,但它们面向使用Visual Basic的绝对0程序员(yiak!,这是我多年来远离MS的主要原因。)

我确实理解.NET框架、托管代码、非托管代码、C#basics、CLR和相关内容,因为它们与Java平台非常相似,几乎是透明的

因此,在我对微软发展的所有咆哮和诚实意见之后:


对于一个非绝对初学者(编程)但对Windows API本身来说绝对陌生的人来说,学习Windows开发的最佳方法是什么?什么是好的路径?

是你的新朋友,也是你的新Javadocs。在深入研究C之前,请确保您对C有很好的理解。如果你感兴趣的话,伪造者也有很好的证据。在学习的同时,一个很好的地方是efnet irc上的WinProg,有很多win32专家随时准备提供帮助。

我将建议一种替代方法(阻力较小)。你看过WPF了吗?它是一个新的GUI工具包,可以让你创建性感的界面(比如Vista中的界面)

这可能足以让您在轻松进入更高级开发的同时保持兴趣。从那里你可以跳进WinAPI的丛林(如果你愿意的话)


只是一个想法,因为那条路对我来说会更有趣。当然,您的里程数可能会有所不同。

我强烈建议您购买一本“”。它解释了Windows的基本DNA,如果你用旧的C++ Win32编程,新的C*WinFrand和未来的Windows演示基础,这是有效的。 简而言之,Windows程序由WinMain组成。第一次启动时,应用程序向系统注册其窗口类,初始化并启动一个消息循环,该循环将持续到遇到WM_QUIT。系统(OS)不断向应用程序的消息Q发送诸如键盘或鼠标单击等消息。在Windows中,任何时候只有一个活动窗口,因此操作系统知道向谁发送消息

像这样的事情在上面的书中有详细的描述

COM(COM+,DCOM)实际上与Windows没有关系。当Word、Excel变得流行时,需要能够从Word(viceversa)访问Excel,他们提出了AcitveX技术,这是COM等的根目录。您可以从Don Box的“Essential COM”开始


一个警告:在微软的世界里,有两种编程方式——走锅炉板的方式(自己编写所有内容)或使用框架(MFC、ATL-COM…)。建议做一点boiler plate,以便了解基本知识。

在一年前进行了相同的转换后,我可以说有很多文献专门用于从Java背景学习c。这是我的第一次尝试,我发现这对学习C#的重要区别/特性非常有用:


还有一些书可能值得一看(google'c#for java程序员)。正如JohnT所说,MSDN库相当于javadocsapi,但我发现使用它确实令人沮丧。最好的学习方法是抓取一份VisualStudioExpress的副本并开始四处玩。使用intellisense探索类和方法。找到一个用Java编写的小程序,并尝试用C#重现它。从简单的问题开始,用谷歌来解决它们。第一周你会发现这很难,但是相信我,你会很快发现的

我认为,如果您专注于.Net开发,那么Petzold在很大程度上应该是无关紧要的。我同意MSDN的建议,虽然我知道C(或使用),但希望我能再次浏览MSDN页面()我不知道如何使用JNA来调用它:S:S@1800-在多个段落中,他提到他想学习Win32 API,所以我认为这是他主要的目的。他告诉我