环境,vs2005,C#,.net2.0
最近用C#写COM组件,用于向C++公开。
程序是没有错的,我在我自己的电脑上,把C#类库项目的项目属性设定为COM可见,编译时为COM interop互操作注册。签名里也加入了snk密钥文件。在我自己的电脑上调试是没有问题的,写的VC++的客户端完全可以调用COM组件。测试时先用regasm comname /unregister注销了,然后用regasm comname /codebase注册后就可以正常使用。(我只用regasm comname注册的话,客户端好像不能够正常使用com组件)但是我拿去别的机器上,没有ide了,有.net 2.0,我用regasm comname /codebase注册,也提示注册成功了,但是vc++的客户端程序根本就不能执行。
应该是在别的机器上注册总是有问题,请问有朋友以前写com组件时遇到过这个问题吗,一般com注册的这个问题,都是如何处理的?
望不吝赐教~

解决方案 »

  1.   

    http://topic.csdn.net/u/20100315/17/8b46df63-437e-4754-90cd-dcc7ea44bce5.html在你的成功调用COM的电脑上执行
    C:\Windows\Microsoft.NET\Framework\v2.0.50727\regasm "C:\Program Files\Microsoft.NET\Primary Interop Assemblies\Microsoft.mshtml.dll" /regfile:myref.reg 将第2个参数换成你的DLL的全路径,这样会生成一个注册表文件,包含了COM组件的信息,然后到其它电脑上导入此注册表文件.
      

  2.   

    2#楼的方法我试过了,还是不行。我也能确保dll跟执行exe在相同目录下。
    一般看帖子他们说的情况,都没有这么回事,应该regasm注册上了就能运行了的啊。
      

  3.   

    网上下个dependency.exe看一下依赖,是不是有依赖于IDE的类啊,目标机器上没有
      

  4.   


    按楼上说的做下?你程序是否有使用第三方的其它DLL或类库?
      

  5.   

    我用dependency查了一下,确实有问题,是side by side的问题。这个问题倒是解决了。
    不过还是继续碰到了别的问题,dependency查不到问题了,在测试机上运行程序时,提示
    "debug error"
    "你的程序用一个不正常的方式请求运行时结束任务"但是这个程序在我的机器上运行却没有问题...
    我还得查
      

  6.   

    C#写com组件时,是不是有些函数和类库不能用啊。
    我测了一下,我调用com组件里的一个函数时,就出错,调用之前,是不出错的。
    但是在我自己写程序的电脑上,无论怎么样都没有错误
      

  7.   

    我单步测试下来,C++的程序里,调用了COM组件里的一个方法。
    那个方法里,执行到这两行时,便执行不过去了。(当然是指测试机)
    TcpClient client = new TcpClient();
    IPHostEntry host = Dns.GetHostEntry(server);
      

  8.   

    错误内容是在于这两句语句上
    IPHostEntry host = Dns.GetHostEntry(server);
    然后我用TCPclient.connect链接host得到的ipaddresslist[0]。
    这个地方出错了,在我自己的机器上可以正常运行,在测试机上却不能正常运行。
    我把IPHostEntry host = Dns.GetHostEntry(server);这一句改动下,用IPAddress.Parse()方式获得目标的IP地址再链接就没问题了。我还是不清楚那一句为何会测试通不过。
      

  9.   

    插一句,测试机上的DNS开了没?是不是你的DNS解析不过去啊,不知道你的server参数传得是什么值。
      

  10.   

    忘了结贴了
    回复#16楼
    DNS开了没?
    这个我还真是不清楚,不知道是不是需要进入控制面板找到服务里相关的dns服务?
    server参数是没有错的,我是传的ipv4格式的ip地址。