我在一个自定义类中编写了如下代码 
Public Function OpenCom(ByVal ComNo As Long, sSetting As String) As Boolean
    Set com = CreateObject("MSCommLib.MSComm")
    com.CommPort = ComNo
    com.Settings = sSetting
    com.PortOpen = True
 End Function执行源代码正常,在写程序的电脑上用生成的可执行程序也可以正常运行。
制作成安装包后复制到其他计算机安装后,会提示如标题所示错误。经过反复验证,判断安装了VB6开发环境的机器都可以正常运行。
如果没有安装vb6,那使用VB打包工具打出的安装包也无法正常使用。
在网上找了几种办法,如注册dao350.dll,scrrun.dll等均无法解决该问题。
求教,准确的原因及解决办法,是哪个或哪些文件导致了这个问题?如何才能在不装vb6的情况下解决此事?

解决方案 »

  1.   

    复制你的系统目录下的mscomm32.ocx 和mscommlib.dll两个文件到对方机器上并注册下。
      

  2.   

    正解!
    个人认为,如果你是写类,那么最好不要使用MSComm控件,建议你用API来实现串口通信,那样就不会有楼主所说的问题了。API实现串口通信参考
      

  3.   

    打包时能把 这个打进去吗?能的话就一起打了 mscomm32.ocx 和mscommlib.dll
      

  4.   

    可以,由于你是通过createobject静态调用的所以vb打包系统不知道。如果是通过引用或者添加部件的话它就自动加上了。
    另外建议不要用vb自带的打包工具,推荐innosetup或installshield。
      

  5.   

    菜单工程-属性-生成 里的“删除有关未使用的activex信息”选项不能打钩
      

  6.   

    再者,LZ为什么不使用放一个comm控件到窗口上,而要使用createobject创建?
      

  7.   

    sysdew:我比较了一下,两台机器上都有mscomm32.ocx,却都没有mscommlib.dll。
    worldy:我是自定义的dll,没有窗体。
    Veron_04:API方式用的不熟,我会考虑看看,但是现在的原因我还是想研究一下。除了想解决问题之外,我还想找到最终是哪个文件导致的。
    我打包是用的setup2go,需要的文件使用VB打包工具提取的。如果知道是什么原因,用什么工具打包应该都不成问题。我会尝试换个工具看看。
      

  8.   

    其它机子需要mscomm32.ocx控件(要vb6下的,xp自带的不能正常使用),并注册。
      

  9.   

    最终发现我写程序的电脑操作系统是xp SP3,不能正常运行的试用电脑是XP SP2。
    如果我在同样是sp2的电脑上编译,则在其他SP2的机器上就可以运行。
    虽然还没有找到具体是哪个文件,但我想可以确认是因为某个系统组件不同造成的。