问题描述
usingSystem;usingSystem.Runtime.InteropServices;usingSystem.Text;namespaceMyCom{[Guid("154BD6A6-5AB8-4d7d-A343-0A68AB79470B")]publicinterfaceMyCom_Interface{[DispId(1)]intAdd(inta,intb);}[Guid("D11FEA37-AC57-4d39-9522-E49C4F9826BB"),InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]publicinterfaceMyCom_Events{}[Guid("2E3C7BAD-1051-4622-9C4C-215182C6BF58"),ClassInterface(ClassInterfaceType.None),ComSourceInterfaces(typeof(MyCom_Events))]publicclassClass1:MyCom_Interface{publicintAdd(inta,intb){returna+b;}}}一、大家都知道COM是需要注册的。注册时要加密钥文件.SNK。这一部就是生成SNK文件。进入VS2008命令提示符。用命令:sn–kMyCom.snk回车。我的在E:vs2008vc下面就生成了一个(MyCom.snk)的文件。(你们可以根据自己的命令提示符所在的文件目录下去找)。然后把它COPY到你的工程根目录下。二、打开AssemblyInfo.cs。在里面加入[assembly:AssemblyKeyFile("MyCom.snk")]三、(1)项目属性->应用程序->程序集信息->选中“使程序集COM可见”。(2)项目属性->生成->选中“为COM互操作注册”。四、生成。如果在Debug下有一个MyCom.tlb,在网上搜了个c#制作com的例子,如上所示。制作过程很顺利,但是怎么用c#调用不了,一调用就出错,调用过程1、项目/添加引用--点击com页,选择生成的MyCom.tlb2、错误信息:“未能添加对‘MyCom’的引用ActiveX类型库是从.NET程序集导出的,无法将其作为引用添加。请改为对.NET集的引用。”但在.NET页中根本找不到MyCom不知所云,请各位大侠指教!谢谢!!
解决方案
解决方案二:
com需要先注册,用regasm去注册后,c#就可以com引用了。
解决方案三:
(2)项目属性->生成->选中“为COM互操作注册”。这不就应该是com的注册了!我用了老兄的方法注册了一下,错误依旧!引用1楼knight94的回复:
com需要先注册,用regasm去注册后,c#就可以com引用了。
解决方案四:
引用楼主piao20040506的回复:
错误信息:“未能添加对‘MyCom’的引用 ActiveX类型库是从.NET程序集导出的,无法将其作为引用添加。请改为对.NET集的引用。”
异常信息已经说的很明白了...不需要这样调用,直接引用.NET程序集即可,.NET保留对COM的支持仅仅是为了兼容性...让.NET程序通过COM调用.NETCOM组件属于脱裤子放P...
解决方案五:
但在.net里找不到.dll!!引用3楼vrhero的回复:
引用楼主piao20040506的回复:错误信息:“未能添加对‘MyCom’的引用 ActiveX类型库是从.NET程序集导出的,无法将其作为引用添加。请改为对.NET集的引用。”异常信息已经说的很明白了...不需要这样调用,直接引用.NET程序集即可,.NET保留对COM的支持仅仅是为了兼容性...让.NET程序通过COM调用.NETCOM组件属于脱裤子放P...
解决方案六:
楼主,最后是怎么解决的?
解决方案七:
可以把写好的DLL考到你的项目目录下面,然后添加引用——>浏览就可以找到需要的DLL文件然后添加引用,就可以使用了!调用方法和你调用类的方式一样!