+ -
当前位置:首页 → 问答吧 → 不使用强命名如何将.Net库注册为COM组件?

不使用强命名如何将.Net库注册为COM组件?

时间:2011-11-30

来源:互联网

我现在要写一个COM组件,由于我写的这个程序需要调用另外几个VB6写的COM程序,而这几个VB6的COM程序是没有强命名的,因此造成.Net的项目也无法进行强命名,有什么办法可以在不进行强命名的情况下注册为COM组件吗?
因为如果我将项目属性中的 为COM Interop注册勾上以后只要编译程序,VS就会将该程序注册到系统中,别的程序可以一直调用,因此我想肯定是有办法可以实现的。就是不知道VS是怎么注册的。
如果问题解决我将本帖追加到100分,先谢过了!

作者: seahi   发布时间: 2011-11-30

引用楼主 seahi 的回复:
因为如果我将项目属性中的 为COM Interop注册勾上以后只要编译程序,VS就会将该程序注册到系统中


vs自动替你签名了。

作者: sp1234   发布时间: 2011-11-30

引用 1 楼 sp1234 的回复:
引用楼主 seahi 的回复:
因为如果我将项目属性中的 为COM Interop注册勾上以后只要编译程序,VS就会将该程序注册到系统中

vs自动替你签名了。


但为什么我手动加入签名后程序编译就报错,而VS自动签名却可以呢?

作者: seahi   发布时间: 2011-11-30

自己顶一下

作者: seahi   发布时间: 2011-12-01

该回复于2011-12-01 11:27:49被管理员删除

  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
#5楼 得分:0回复于:2011-12-01 11:31:40
也有同样的问题,帮顶

作者: seahi   发布时间: 2011-12-01


给你个我测试的例子:
C# code

 [ComVisible(true)]
  public interface IMath
  {
  [DispId(1)]
  int Add(int a, int b);

  [DispId(2)]
  int Sub(int a, int b);
  }

[ComVisible(true)]
  [ClassInterface(ClassInterfaceType.None)]
  public class Dotnet :ServicedComponent, IMath
  {
  #region IMath 成员

  public int Add(int a, int b)
  {
  return a+b;
  }

  public int Sub(int a, int b)
  {
  return a - b;
  }

  #endregion
  } 



作者: cxxxxyc   发布时间: 2011-12-01

请问楼上按这个办法不用强命名也能注册吗?

作者: sdl2005lyx   发布时间: 2011-12-01

是的,你试试不就知道的,有没几行代码。。。。

作者: seahi   发布时间: 2011-12-02

ServicedComponent不知道在哪个命名空间啊?
我用的是VS2005。

作者: sdl2005lyx   发布时间: 2011-12-02

找到了。要先引用System.EnterpriseServices.dll,我先试试看。

作者: seahi   发布时间: 2011-12-02

兄弟,好歹你查查MSDN啊,这么简单的事情,为什么还问出来!

  System.EnterpriseServices

作者: seahi   发布时间: 2011-12-02

有劳 突破自我 兄了,试了一下,貌似也不行啊。
用regasm注册后依然不能使用。

作者: sdl2005lyx   发布时间: 2011-12-02

继续顶

作者: seahi   发布时间: 2011-12-02