COM与.NET(四)COM体验碰到的问题

    菜鸟我捣鼓COM这些天,遇到一些问题特此记录以备后用。

  1. Q:.NET程序集不能导出类型?    A:须记得在需要导出的类型上加[ComVisible(true)]标记
  2. Q:客户端提示“找不到注册的类(或接口)”?    A:未在本地注册COM(regasm.exe产生的reg须在客户端运行一下),那该死的注册表
  3. Q:客户端提示“找不到程序集或文件”?    A:CoCreateInstanceEx(rclsid, NULL, CLSCTX_LOCAL_SERVER, &ServerInfo,1,&MultiQi),改为CLSCTX_REMOTE_SERVER,服务器找不到SayHello.dll,须将SayHello.dll用gacutil.exe添加到程序集全局缓存中去。还有可能是版本不对。
  4. Q:客户端多线程不能调用?    A:改CoInitialize()CoInitializeEx(NULL, COINIT_MULTITHREADED);或在须调用COM的线程中调用CoInitialize()
  5. Q:如何得到tlb文件?    A:用regasm.exe或tlbexp.exe工具生成
  6. Q:如何查看COM组件的IDL?    A:用Microsoft Visual Studio 8>>Common7>>Tools>>Bin(VS2003在Tools目录下)目录下的OleView.exe工具打开上一步生成的tlb文件即可,.NET程序集导出的会产生几句方言(“custom(....)”VC不认识)
  7. Q:VC环境中怎么引用COM组件定义?    A#import "SayHello.TLB" no_namespace named_guids 或添加.h文件
  8. Q:怎么生成VC环境需要的.h文件?    A:将第6步生成的idl文件添加的VC项目中,右键idl文件生成.h文件即可
  9. Q:能释放本地COM+服务器的COM对象,但远程不能?    A:这是个郁闷的事情,首先有可能是你的验证权限服务器配置和客户端设置不匹配。还有一个恐怖的原因在这我就想啰嗦几句(我在遇到这个问题是我本机会这样到一个同事的机器上就是好的,其他同事机器又是不行的,郁闷的我查了2天的资料,还打电话到M$问,对方说我们买的VS不够资格问这类问题,只能帮我解决安装上错误,要另外付款才回答,单价是1000元/一个问题M$网站上的标价是450元一个问题)。言归正传,我测试的WIN2003服务器上打上的SP2,这个问题神奇的解决了。
  10. Q:想不加强命名也不加程序集全局缓存运行服务器实例?    A:方法是清除掉已经加的全局缓存,将程序集添加到系统文件夹的System32目录中去吧。因为COM+应用程序的运行目录是$Windir$System32。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值