Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么可以';我不能为COM互操作注册WinForms应用程序吗?_C#_.net_Visual Studio_Dll - Fatal编程技术网

C# 为什么可以';我不能为COM互操作注册WinForms应用程序吗?

C# 为什么可以';我不能为COM互操作注册WinForms应用程序吗?,c#,.net,visual-studio,dll,C#,.net,Visual Studio,Dll,我正在使用Visual Studio 2015。我已成功创建类库并选择: Register form COM Interop Make Assembly COM-visible 然后,我通过一个安装项目将其部署到其他用户,效果非常好(尽管我仍然不明白为什么Intellisense不适用于它) 现在我尝试对WinForms应用程序执行相同的操作,但是 Register form COM Interop 应用不可行,它是灰色的-应该吗?如果是这样,为什么我不能为COM互操作注册一个应用程序,以便

我正在使用Visual Studio 2015。我已成功创建类库并选择:

Register form COM Interop
Make Assembly COM-visible
然后,我通过一个安装项目将其部署到其他用户,效果非常好(尽管我仍然不明白为什么Intellisense不适用于它)

现在我尝试对WinForms应用程序执行相同的操作,但是

Register form COM Interop

应用不可行,它是灰色的-应该吗?如果是这样,为什么我不能为COM互操作注册一个应用程序,以便在其他应用程序中操作它?(例如,在Excel VBA中)

问题是com注册通常仅对程序集(.dll)有效,而WinForm应用程序通常是可执行(.exe)


因此,在本例中,您应该创建一个dll,并将com可见的所有函数和类移动到此程序集中。而不是使其Com可见,并从executbale WinForms应用程序中使用它。

问题是Com注册通常仅对程序集(.dll)有效,而WinForm应用程序通常是可执行(.exe)


因此,在本例中,您应该创建一个dll,并将com可见的所有函数和类移动到此程序集中。而不是使它在Com中可见,并从executbale WinForms应用程序中使用它。

若要注册.NET程序集进行Com互操作,该程序集必须是一个类库,该类库将由应用程序共享

另一方面,WinForms应用程序作为独立程序运行,不希望被其他应用程序共享

在这种情况下,您可以创建一个类库项目,并在该项目中创建一个WinFormsUserControl,并通过使其COM可见将
UserControl
公开给其他应用程序


奇怪的是,在我的搜索中很难找到更多最近的例子

要为COM互操作注册.NET程序集,该程序集必须是一个类库,该类库由应用程序共享

另一方面,WinForms应用程序作为独立程序运行,不希望被其他应用程序共享

在这种情况下,您可以创建一个类库项目,并在该项目中创建一个WinFormsUserControl,并通过使其COM可见将
UserControl
公开给其他应用程序


奇怪的是,在我的搜索中很难找到更多最近的例子

谢谢你的回答。我想,当我建立了一个新的类库,把表单放在里面就可以了。。。似乎默认的winFormApp不允许这样做——我想我现在明白为什么了。谢谢谢谢你的回答。我想,当我建立了一个新的类库,把表单放在里面就可以了。。。似乎默认的winFormApp不允许这样做——我想我现在明白为什么了。谢谢这有点武断,是一种很好的做法,您可以运行Regasm.exe,它可以正常工作。但是您的Main()入口点无法运行,因此应用程序无法正常运行。NET不支持进程外COM服务器。@HansPassant感谢您的想法,我不希望我的用户必须运行Regasm-我发现可以在类库中创建所有内容并从visual studio运行安装项目。在另一个答案的帮助下,我刚刚发现了如何让我的库使用intellisense,这样我就可以让用户轻松地使用我的类编写代码。您的一个答案也有帮助,谢谢:DIt有点武断,这是一个很好的实践,您可以运行Regasm.exe,它会工作得很好。但是您的Main()入口点无法运行,因此应用程序无法正常运行。NET不支持进程外COM服务器。@HansPassant感谢您的想法,我不希望我的用户必须运行Regasm-我发现可以在类库中创建所有内容并从visual studio运行安装项目。在另一个答案的帮助下,我刚刚发现了如何让我的库使用intellisense,这样我就可以让用户轻松地使用我的类编写代码。你的一个答案也有帮助,谢谢:DSo我无法创建一个可由COM利用的.exe文件。我问这个问题的原因是我想在一个安全的在线区域将密码编码到一个应用程序中,人们可以通过这个应用程序发送信息。我可以创建任意多个库,但我真的需要我的客户端应用程序来访问服务器托管的应用程序,并希望它可以通过COM实现这一点。。。但是我认为这是不可能的。你可以问一个新的问题来满足这个要求,可以有不同的方法来满足这个要求,不一定是COM的东西。所以我无法创建一个可以被COM利用的.exe文件。我问这个问题的原因是我想在一个安全的在线区域将密码编码到一个应用程序中,人们可以通过这个应用程序发送信息。我可以创建任意多个库,但我真的需要我的客户端应用程序来访问服务器托管的应用程序,并希望它可以通过COM实现这一点。。。但是我认为这是不可能的。你可以针对这个需求提出一个新的问题,可以有不同的可能方式来满足这个需求,不一定是COM的东西。