这是一个合理的"应用程序入口点"吗?

时间:2020-03-06 14:55:02  来源:igfitidea点击:

我最近遇到一种情况,其中代码正在动态加载一些库,将它们连接起来,然后调用所谓的"应用程序入口点"(其中一个库必须实现IApplication.Run())。

这是有效的"应用程序入口点"吗?

我将一直认为应用程序入口点是在加载库之前,并且发现在大量工作后,IApplication.Run()在稍有误导性的情况下被调用。

解决方案

术语"应用程序"可以表示任何我们想要的含义。 "应用程序"仅表示可以一起解决问题的资源(库,代码,图像等)的集合。

因此,要回答问题,是的,这是对"应用程序"一词的有效使用。

单独申请实际上没有任何意义。人们经常使用它来谈论为用户提供一些价值的计算机程序。一个更正确的术语是应用程序软件,它具有以下定义:

Application software is a subclass of
  computer software that employs the
  capabilities of a computer directly
  and thoroughly to a task that the user
  wishes to perform. This should be
  contrasted with system software which
  is involved in integrating a
  computer's various capabilities, but
  typically does not directly apply them
  in the performance of tasks that
  benefit the user. In this context the
  term application refers to both the
  application software and its
  implementation.

而且由于应用程序实际上是指应用程序软件,并且软件是在计算机上执行任何类型任务的任何代码段,因此我想说一个库也可以是一个应用程序。

无论如何,大多数术语都是人为的。插件没有应用程序吗?浏览器的Flash插件是否没有应用程序?人们说不,这只是一个插件。为什么?由于它不能单独运行,因此需要将其加载到实际进程中。但是没有定义说只有"可以自己运行"的东西才是应用程序。图书馆也是如此。核心应用程序可能只是一个空容器,所有逻辑和功能(甚至与用户的交互)都可以由插件或者库执行,在这种情况下,与其说是为容器提供一些上下文的空容器,不如说是一个应用程序。应用程序运行。将此与Java进行比较。一个Java应用程序不能单独运行,它必须在Java虚拟机(JVM)中运行,这是否意味着JVM是该应用程序,而Java代码只是...那么呢? Java代码不是真正的应用程序,而JVM只是一个空的运行时环境,如果没有加载的Java代码,该环境不会为最终用户提供任何服务?

术语"应用程序"和"系统"是被广泛使用的术语,我们需要先与会话伙伴商定它们的含义。例如。有时,应用程序是带有UI的东西,而系统是"无UI"的。总的来说,这只是我们所说的土豆,我是说土豆。

对于示例,我们使用:这就是运行时(例如.NET或者Java)所做的:加载一组库并调用应用程序入口点,即" main"方法。

因此,在情况下,加载库的代码也是如此,并且可能在接口上调用方法,然后可以将加载代码视为该应用程序的运行时。这只是一个观点问题。

我认为我们指的可能是C / C ++代码中的main()函数或者Windows应用程序中的WinMain。也就是说,这是通常在应用程序中开始执行的地方。问题非常广泛且含糊不清-例如,我们要在哪个操作系统上运行-但这可能正是我们要寻找的。这也可能解决这个问题。

当我们问问题时,请记住,细节是朋友。当我们向人们提供详细信息时,人们可以为我们提供更好,更明智的答案。

编辑:
从操作系统的角度出发,在更广泛的范围内考虑必须发生的事情。当用户指定要运行某个应用程序时,操作系统必须从硬盘驱动器中加载该应用程序,然后,当该应用程序加载到内存中时,它必须将控制权传递到新加载的内存所占用的内存中的某个位置应用程序继续执行。那就是"应用程序入口点"。当使用动态链接的代码构建应用程序时,操作系统必须加载所有动态链接的代码,以便将正确的应用程序映像获取到内存中。加载这些共享的代码位不会改变以下事实:在将应用程序加载到内存时,操作系统必须具有控制权传递给该点。

我认为在这种情况下,"应用程序入口点"是指"应用程序(代码)进入库的点"。