什么是interop dll?
我需要一些澄清。 我有一个使用Crystal Reports的Reportwriter DLL。 它是用VB6编写的。 我必须添加这个DLL到我的asp.net项目,在那里它创build一个互操作的DLL。
据我了解,互操作DLL是作为一个中介,以便我的.net代码可以对报告的作者DLL说话。
那么我注册互操作的DLL或注册原来的DLL?
当你在VB6中编写代码时,编译结果是一个COM组件。 COM组件提供接口,coclasses,结构和枚举,通常使用COMtypes库进行描述。 但是,为了在.NET中使用COM组件,需要使用.NET可以理解的格式(即.NET程序集(因为它不能直接与types库一起工作))进行types描述。 因此,互操作程序集只是一个“转换的”COMtypes库,从某种意义上说,它包含了对应于types库中相同事物的接口,结构等的描述。
(上面的内容有些简单,因为互操作程序集不需要从types库中生成,例如,如果需要,可以手动编写一个)。
与通常所说的相反,互操作程序集不包含任何可执行代码,并且不进行任何编组。 它只包含types定义,唯一可以有方法的地方是接口,接口中的方法没有实现。 对.NET调用.NET的调用实际上是由CLR本身根据从互操作程序集加载的types描述完成的 – 它会即时生成所有必要的代码。
至于你的问题。 您需要注册您的COM DLL(您的VB6的输出)项目 – 例如,使用regsvr32.exe
。 你不应该(事实上你不能)以这种方式注册一个互操作程序集,因为它不是一个COM组件 – 它只是一个普通的.NET程序集,所以你可以把它放在与你的.exe / .dll相同的文件夹中,或像平常一样把它放进GAC。
帕维尔的好回答。 另外,从.NET Framework第4版开始,您不需要在应用程序中部署interop程序集: http://msdn.microsoft.com/zh-cn/library/tc0204w0.aspx
你是对的 interop DLL将调用包装到VB6组件,并使它们透明。
在机器上注册DLL时,您将执行应用程序,您仍然需要注册VB6 DLL。 互操作DLL将坐在你的应用程序的bin文件夹中,并将调用封装出来。
你应该注册你的VB6 DLL并在你的.NET项目中引用它; 该引用将创build您的Interop.dll
- 从DataReader对象中查找Field的数据types
- 使用应用程序池标识的IIS应用程序丢失主令牌?
- 是否有可能使用Fiddler的请求生成器进行JSON请求?
- 在SQL Server 2008中启用Service Broker
- 使用JavsScript从客户端调用服务器端的非静态方法
- 什么是Web.Debug.config和Web.Release.Config文件?
- RegisterStartupScript和RegisterClientScriptBlock之间的区别?
- 如何添加具有值的新列到现有DataTable?
- 如何避免Response.End()在Excel文件下载过程中出现“线程被中止”exception