我用的是#import "c:\windows\system32\opcdaauto.dll" no_namespace
程序:
try
    {
       IOPCAutoServerPtr myServer( __uuidof(IOPCAutoServer));
      }
   catch(_com_error e)
   {   
  AfxMessageBox(e.ErrorMessage());   
   }
跳出"没有注册类别“对话框我已经用了regsvr32 c:\windows\system32\opcdaauto.dll请问是什么问题啊????帮帮忙啊

解决方案 »

  1.   

    类的接口ID和CLSID可以不一样的。用#import "c:\windows\system32\opcdaauto.dll" named_guid看看生成哪些CLSID。
      

  2.   

    tlh文件里面是这样定义的,有什么特殊的没有??
    //
    // Smart pointer typedef declarations
    //_0.COM_SMARTPTR_TYPEDEF(IOPCAutoServer, __uuidof(IOPCAutoServer));
    _COM_SMARTPTR_TYPEDEF(IOPCGroups, __uuidof(IOPCGroups));
    _COM_SMARTPTR_TYPEDEF(IOPCGroup, __uuidof(IOPCGroup));
    _COM_SMARTPTR_TYPEDEF(OPCItems, __uuidof(OPCItems));
    _COM_SMARTPTR_TYPEDEF(OPCItem, __uuidof(OPCItem));
    _COM_SMARTPTR_TYPEDEF(DIOPCGroupEvent, __uuidof(IDispatch));
    _COM_SMARTPTR_TYPEDEF(DIOPCGroupsEvent, __uuidof(IDispatch));
    _COM_SMARTPTR_TYPEDEF(OPCBrowser, __uuidof(OPCBrowser));
    _COM_SMARTPTR_TYPEDEF(DIOPCServerEvent, __uuidof(IDispatch));//
    另外我把上面那段程序的IOPCAutoServerPtr myServer( __uuidof(IOPCAutoServer));换成:
      HRESULT hr;       
      IOPCAutoServerPtr myServer;
      hr=myServer.CreateInstance( __uuidof(IOPCAutoServer));  就跳出“没有注册类别  ”   蒋大哥,具体该怎么做???还有各位大侠一定要继续指导阿!!!
      

  3.   

    tlh里的内容:
    struct __declspec(uuid("28e68f92-8d75-11d1-8dc3-3c302a000000"))
    /* dual interface */ IOPCAutoServer;
    struct /* coclass */ OPCGroups;
    struct __declspec(uuid("28e68f95-8d75-11d1-8dc3-3c302a000000"))
    /* dual interface */ IOPCGroups;
    struct /* coclass */ OPCGroup;
    struct __declspec(uuid("28e68f96-8d75-11d1-8dc3-3c302a000000"))
    /* dual interface */ IOPCGroup;
    struct __declspec(uuid("28e68f98-8d75-11d1-8dc3-3c302a000000"))
    /* dual interface */ OPCItems;
    struct __declspec(uuid("28e68f99-8d75-11d1-8dc3-3c302a000000"))
    /* dual interface */ OPCItem;
    struct __declspec(uuid("28e68f97-8d75-11d1-8dc3-3c302a000000"))
    /* dispinterface */ DIOPCGroupEvent;
    struct __declspec(uuid("28e68f9d-8d75-11d1-8dc3-3c302a000000"))
    /* dispinterface */ DIOPCGroupsEvent;
    struct __declspec(uuid("28e68f94-8d75-11d1-8dc3-3c302a000000"))
    /* dual interface */ OPCBrowser;
    struct __declspec(uuid("28e68f93-8d75-11d1-8dc3-3c302a000000"))
    /* dispinterface */ DIOPCServerEvent;
    struct /* coclass */ OPCServer;//
    // Smart pointer typedef declarations
    //_COM_SMARTPTR_TYPEDEF(OPCItem, __uuidof(OPCItem));
    _COM_SMARTPTR_TYPEDEF(OPCItems, __uuidof(OPCItems));
    _COM_SMARTPTR_TYPEDEF(DIOPCGroupEvent, __uuidof(DIOPCGroupEvent));
    _COM_SMARTPTR_TYPEDEF(DIOPCGroupsEvent, __uuidof(DIOPCGroupsEvent));
    _COM_SMARTPTR_TYPEDEF(OPCBrowser, __uuidof(OPCBrowser));
    _COM_SMARTPTR_TYPEDEF(IOPCAutoServer, __uuidof(IOPCAutoServer));
    _COM_SMARTPTR_TYPEDEF(IOPCGroups, __uuidof(IOPCGroups));
    _COM_SMARTPTR_TYPEDEF(IOPCGroup, __uuidof(IOPCGroup));
    _COM_SMARTPTR_TYPEDEF(DIOPCServerEvent, __uuidof(DIOPCServerEvent));//
      

  4.   

    怎么看来看去没看到一个CLSID?
      

  5.   

    那我该怎么办才好啊,我在vc里写代码的时候,调用myServer的时候,是可以自动的显示出它的方法和属性的,编译也没有错误,就是运行程序到使用上面那些代码的时候就会出那样的问题
      

  6.   

    那就用CLSIDFromProgID获得CLSID看看,或者直接用_com_ptr的构造函数
    创建方法应该类似
    IOPCAutoServerPtr myServer("OPC.AutoServer");
    这里"OPC.AutoServer"是一个支持IOPCAutoServer接口的对象的ProgID。
      

  7.   

    HRESULT hr;       
      IOPCAutoServerPtr myServer;
      hr=myServer.CreateInstance( __uuidof(IOPCAutoServer));//这里要的是clsid不是iid,只要找到clsid即可!
    试试:
    HRESULT hr;       
      IOPCAutoServerPtr myServer;
      hr=myServer.CreateInstance( __uuidof(OPCServer)); //估计就是它了,你的tlh给的不全只能猜测到这里了!
      

  8.   

    __uuidof(IOPCAutoServer) 括号里的要写COM类才行哦,比如CoOPCServer这样的样子
      

  9.   

    今天下午我自己把它搞定了,正如wangweixing2000所说的一样,你早点来我就不用浪费这么多时间了,哈哈。无论怎么样还是谢谢各位的帮忙!!