我现在已经在一些教程中看到了这一点......但是在世界上Android源代码如何没有主要方法并且仍在运行.
例如(来自http://developer.android.com/guide/tutorials/hello-world.html):
public class HelloAndroid extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
Run Code Online (Sandbox Code Playgroud)
那运行但没有主要!!!
我还认为使用像onCreate(或formLoad等)这样的东西是不好的,因为构造函数应该做这项工作,这样的内置方法有时可能会有臭味.但onCreate是一个切入点?即使没有主?
如果有多个活动......这些内置事件处理程序是否存在层次结构?OnCreate胜过其他一切?否则,应用程序将如何知道要运行什么或在何处输入程序?
谢谢!
我正在使用Google Web Toolkit,对GWT中的入口点感到有些困惑.谷歌的文档说:
如果模块中有多个EntryPoints(定义onModuleLoad()的接口),则只要该模块(和外部文档)准备好,它们就会按顺序调用.如果要在同一页面中加载多个GWT模块,则只要该模块和外部文档都准备就绪,就会调用每个模块的EntryPoint.两个模块的EntryPoints不能保证同时触发,或者与主机页面中指定选择脚本的顺序相同.
那么您网站中的每个页面都需要为其定义入口点吗?
当你根据Java类生成javascript时,你真的需要一个入口点吗?
您是否能够将多个自动生成的js定义组合到单个*.gwt.xml文件中?
编辑:链接到引用的来源:http://code.google.com/webtoolkit/doc/1.6/DevGuideOrganizingProjects.html
谢谢!
是否可以避免C程序中的入口点(主).在下面的代码中,是否可以在func()不通过main()以下程序调用via的情况下调用该调用?如果是,如何做,何时需要,为什么要给出这样的规定?
int func(void)
{
printf("This is func \n");
return 0;
}
int main(void)
{
printf("This is main \n");
return 0;
}
Run Code Online (Sandbox Code Playgroud) c compiler-construction operating-system function entry-point
为什么void总是不鼓励在C++中设置入口点的返回类型,后来被标准删除并被现代编译器禁止?为什么它被认为是不好的做法?
现在,据我所知,C#和Java都允许入口点的返回类型为voidie
static void main(String[] args) /* Java */
static void Main(string[] args) /* C# */
Run Code Online (Sandbox Code Playgroud)
C#和Java程序员并不认为这是不好的做法,事实上他们经常使用它.
这是其他语言(只打算是,我怀疑C++会成功在这十年中,至少)C的可能接班人++像d编程语言或瓦拉也允许void main().正如您所看到的,我怀疑C++社区是否将其从标准中删除,因为它过于模糊或不受欢迎.
所以我的问题是,为什么C++社区删除了void main()?这有什么问题?
我的目标是创建一个可启动影子复制应用程序的可执行文件.诀窍是,我希望这个入门程序没有外部依赖关系,并且不必包含任何有关它必须启动的程序的知识.
我也希望它是目录中唯一的可执行文件.换句话说,我希望它"运行".dll程序集而不是.exe程序集.(我可以要求每次加载到新AppDomain中的.dll文件的名称都是相同的,比如Main.dll或类似的东西.)
它看起来像AppDomain.ExecuteAssembly将完全按照我的意愿行事.它表示它将在".NET Framework标头中指定的入口点"开始执行.
当我尝试使用该功能时,我收到错误"在程序集中找不到入口点'DllApp'".
我有启动程序,只是试图运行程序集:
static void Main()
{
AppDomain domain = AppDomain.CreateDomain( "DllApp" );
domain.ExecuteAssembly( "DllApp.dll" );
}
Run Code Online (Sandbox Code Playgroud)
应用程序代码,在.dll文件中,带有默认入口点:
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault( false );
Application.Run( new Form1() );
}
}
Run Code Online (Sandbox Code Playgroud)
Main()函数的这个页面说"库和服务不需要Main方法作为入口点".它并没有说它们也没有默认入口点.
我已经尝试了public/private static void main的所有各种排列,int返回类型,string [] args作为参数,带有命名空间,没有命名空间,静态/非静态类等.
我能够将我的代码更改为继承MarshalByRefObject,然后使用CreateInstance创建一个对象,但这似乎会将启动器更紧密地耦合到它应该启动的程序.如果我可以使用ExecuteAssembly,那么正在启动的应用程序只需要一个静态的void Main,这非常简单而且很难搞乱.
.dll程序集是否有可能具有默认入口点,并且ExecuteAssembly可以找到它,或者我是否只需要让自己去另一条路径?
我正在使用入口点开发一个带插件的松散机器人.我想在运行时动态添加插件.
我有一个这种结构的项目:
+ ~/my_project_dir/
+ my_projects_python_code/
+ plugins/
- plugin1.py
- plugin2.py
- ...
- pluginN.py
- setup.py
- venv/
- install.sh
Run Code Online (Sandbox Code Playgroud)
我的setup.py文件看起来像这样:
from setuptools import setup, find_packages
setup(
name="My_Project_plugins",
version="1.0",
packages=['plugins'],
entry_points="""
[my_project.plugins]
plugin1 = plugins.plugin1:plugin1_class
plugin2 = plugins.plugin2:plugin2_class
...
pluginN = plugins.pluginN:pluginN_class
"""
)
Run Code Online (Sandbox Code Playgroud)
运行sudo install.sh执行以下操作:
将所需文件复制到 /usr/share/my_project_dir/
激活virtualenv at /usr/share/my_project_dir/venv/bin/activate
跑: python setup.py develop
这按预期工作,并正确设置我的入口点,以便我可以通过机器人使用它们.
但我希望能够setup.py在机器人运行时添加插件并能够使用它.所以我想添加一行:pluginN+1 = plugins.pluginN+1:pluginN+1_class并且可以使用pluginN + 1.
我尝试/学到了什么:
在/usr/share/my_project_dir/venv/bin/activate我打开一个Python交互式shell并迭代之后pkg_resources.iter_entry_points(),它列出了从setup.py的初始状态加载的所有东西(即plugin1到pluginN)
如果我添加一行setup.py并 …
任何人都可以解释Eclipse GWT插件定义它的入口点的位置吗?
为了让我的旧GWT项目再次使用GWT 2.0,我在Eclipse中创建了一个默认的GWT 2.0项目,并且能够成功运行它.它是一个请求名称并在服务器上调用'greet'servlet的那个,它响应等...到目前为止一切都那么好.
然后我将我的旧maven GWT项目中的所有类移植到这个新的GWT项目中,希望能使RPC调用工作.它有很多依赖项,所以我也复制了maven pom.xml,注释掉pom中所有gwt相关的插件,并设法让Eclipse M2Eclipse maven插入识别pom并采用所有maven依赖项.Eclipse中的所有问题现在都已解决,看起来很不错.
但是,当我单击项目的GWT编译图标时,它会弹出一个"GWT编译"对话框,现在要求我"添加一个入口点模块".此对话框中没有列出可供选择的入口点.这令人沮丧,因为我保留了完全相同的GWTApp.gwt.xml并将我的代码移动到以前工作的自动生成的GWTApp.java类中.
我无法想象为什么Eclipse插件不会在GWTApp.gwt.xml文件中查找入口点的内容.
任何人都可以解释如何定义这些入口点或建议项目停止工作的原因吗?
谢谢!
我的软件有一个主要用于正常使用,另一个用于单元测试.如果gcc有一个选项来指定使用哪个"主要"功能,我会喜欢它.
我一直#[tokio::main]在我的一个程序中使用该宏。不合格的导入使用后main,遇到了意想不到的错误。
use tokio::main;
#[main]
async fn main() {}
Run Code Online (Sandbox Code Playgroud)
error[E0659]: `main` is ambiguous
--> src/main.rs:3:3
|
3 | #[main]
| ^^^^ ambiguous name
|
= note: ambiguous because of a name conflict with a builtin attribute
= note: `main` could refer to a built-in attribute
Run Code Online (Sandbox Code Playgroud)
我一直在搜索文档,但找不到#[main]任何地方描述的这个内置属性。Rust 参考包含内置属性的索引。该索引不包含#[main],但它包含名为 的属性#[no_main]。
我对存储库进行了搜索rustlang/rust,发现了一些似乎相关的代码,但它似乎使用了一对名为#[start]和 的宏#[rustc_main],而没有提及其#[main]本身。(这两个宏似乎都不能在稳定版上使用,会#[start]发出一个错误,表明它不稳定,并#[rustc_main]发出一个错误,表明它仅供编译器内部使用。)
我从名称中猜测它是为了将不同的函数标记为入口点而不是main,但它似乎也没有这样做:
error[E0659]: …Run Code Online (Sandbox Code Playgroud) 这是一系列至少两个密切相关但不同的问题的一部分.我希望我能分别问他们做对了.
我试图让我的Visual C++ 2008应用程序在没有C运行时库的情况下工作.这是一个没有MFC或其他花哨的东西的Win32 GUI应用程序,只是简单的Windows API.
所以我将Project Properties - > Configuration - > C/C++ - > Advanced - > Omit Default Library Names设置为Yes(编译器标志/Zl)并重建.
然后链接器抱怨外部未解决_WinMainCRTStartup.可以说,我可以告诉链接器使用不同的入口点MyStartup.从我在网上收集的内容,_WinMainCRTStartup做一些初始化的东西,我可能想做MyStartup一个子集.
所以我的问题是:如果我不使用CRT,哪些功能可以_WinMainCRTStartup执行,哪些可以省略?
如果您对这些内容有所了解,请查看我的其他问题.谢谢!
旁白:我为什么要首先这样做?
entry-point ×10
c ×2
gwt ×2
android ×1
appdomain ×1
assemblies ×1
c# ×1
c++ ×1
crt ×1
eclipse ×1
function ×1
gcc ×1
maven ×1
plugins ×1
python ×1
rust ×1
rust-macros ×1
setuptools ×1
standards ×1
visual-c++ ×1
winmain ×1