Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.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
使用VS2008(vb.net),我需要创建一个对象,我可以使用CreateObject在经典ASP中使用_Vb.net_Visual Studio 2008_Com_Interop_Createobject - Fatal编程技术网

使用VS2008(vb.net),我需要创建一个对象,我可以使用CreateObject在经典ASP中使用

使用VS2008(vb.net),我需要创建一个对象,我可以使用CreateObject在经典ASP中使用,vb.net,visual-studio-2008,com,interop,createobject,Vb.net,Visual Studio 2008,Com,Interop,Createobject,我对VB.net很陌生。我以前在VB6中编写过这些对象。我只是迷失在VB.net中,但我必须学会如何做到这一点。我在谷歌上搜索了几个小时,只前进了一小步。任何人都可以发布一个链接,解释如何从开始到结束这样做 我已经成功地编写了类对象,但我不知道如何注册它以及CreateObjectName1.name2中的name1和name2来自何处 Regsrv32将不起作用。它说没有找到入口点,也不会注册。此外,我无法将其放入Assemblies目录。我读了一些关于regasm命令的文章,但是我似乎也不能

我对VB.net很陌生。我以前在VB6中编写过这些对象。我只是迷失在VB.net中,但我必须学会如何做到这一点。我在谷歌上搜索了几个小时,只前进了一小步。任何人都可以发布一个链接,解释如何从开始到结束这样做

我已经成功地编写了类对象,但我不知道如何注册它以及CreateObjectName1.name2中的name1和name2来自何处

Regsrv32将不起作用。它说没有找到入口点,也不会注册。此外,我无法将其放入Assemblies目录。我读了一些关于regasm命令的文章,但是我似乎也不能让它起作用


提前感谢您的帮助。

您必须转到类库属性并选择“注册COM互操作”选项。这将使您的程序集可供COM使用。

您希望为.NET组件创建一个称为aka CCW的组件。这基本上需要使用一些guid设置一些COM接口,或者在前面提到的项目属性中启用Register for COM Interop,或者使用regasm.exe

我将假定您不是在尝试编写COM DLL,而是一个调用各种子程序集(如VB6 EXE调用ActiveX DLL)的完整项目。如果你能更具体地说明你想做什么,那会对我有更好的帮助

关于VB.NET与VB6的几点比较

1对于仅.NET项目,没有注册。如果一个EXE或DLL引用另一个.NET DLL,唯一的要求是DLL必须存在于父目录中

2您只能通过在GAC中注册.NET程序集来为.NET应用程序执行COM样式的注册。然而,这样做有几个要求。在.NETGAC上进行搜索,它将为您提供如何进行此操作的独家新闻

3您可以将.NET程序集设置为使用COM,在这种情况下,它将按照COM规则操作,包括向regsvr注册

您会发现对于.NET only项目,2或3只出现在极少数情况下。1将应用于90%的DLL程序集。这取决于您的项目

CreateObject的一个常见用途是允许插件或可安装库。NET通过反射API处理此问题。使用反射API,您可以查看目录,浏览每个.NET DLL,查看它们是什么,并根据找到的内容创建对象。搜索.NET Reflection以了解这一点

如果您的项目是.NET only,则我建议您创建一个程序集,该程序集由主程序集和定义所创建对象接口的单个子程序集引用。当您使用反射API并确定对象类型时,可以将其分配给该接口的变量,并使用intellisense和其他辅助工具对其进行编码


如果您有旧的COM ActiveX控件或DLL,则.NET将生成一个包装类,将ActiveX对象公开给.NET。我会花一些时间学习.NET是如何做到这一点的。我所做的是创建一个虚拟项目,并让.NET引用我需要的ActiveX内容。然后我找到包装器项目和它创建的DLL,并将它们移动到中心区域。这就是为什么当我使用相同的ActiveX材料处理后续项目时,我知道所有包装器的位置。

您不必安装到GAC中进行互操作。带有代码基开关的Regasm将允许您在GAC之外放置。我不是说COM互操作。但是.NET共享程序集的方式不同。你认为提问者说的是COM。我的答案并不是假设,而是将重点放在.NET共享程序集的各种方式上。