OPC 技术论坛

OPC 技术

探讨OPC Server相关技术

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

     这节我们将介绍com类工厂的实现。

1) 准备工作:

     在OPC Server运行过程中,对应每一个OPC client,都会生成一个COPCServer对象,为了管理所有的OPC server对象,我们先创建一个OPC server的管理类CServerMgr.
     "Project->Add Class.. ->C++ class"
     CServerMgr头文件如下:

Code

     AddServerToList()实现:

CServerMgr::AddServerToList

     RomoveServerFromList() 实现:

Code

     在ServerMgr.cpp文件中定义CServerMgr全局变量:
     CServerMgr     g_ServerMgr;

2) 实现OPC 类工厂

这里实现的类工厂继承IClassFactory。

类工厂定义如下:

COPCClassFactory

 

     现在我们来看看如何具体实现类工厂:

     a. 初始化引用计数
     m_lRefCount = 0;

     b. QueryInterface()

QueryInterface

 

     c. AddRef()

AddRef

 

     d. Release()

Release

 

     e. CreateInstance()

    在"OPCClassFactory.cpp"定义:
     #include "ServerMgr.h"
     extern CServerMgr g_ServerMgr;

CreateInstance

 

     f. LockServer()

LockServer

 

3) 注册类厂

     因为我们的server是进程外server,所以要调用CoRegisterClassObject注册类厂对象。
     a.  在"COPCTestServerApp"类中添加变量:
          IClassFactory* m_pFactory;
          DWORD m_dwRegisterID;
     并在构造函数初始化:
          m_pFactory = NULL;
          m_dwRegisterID = 0;

     b. 定义OPC server GUID
     在"OPCTestServer.cpp"中添加:
          //Server GUID
          // {2BBA92EA-809B-4717-B3F9-750422C937B2}
          DEFINE_GUID(CLSID_OPCTestServer, 0x2bba92ea, 0x809b, 0x4717, 0xb3, 0xf9, 0x75, 0x4, 0x22, 0xc9, 0x37, 0xb2);

     c. 在InitInstance()中添加:

Code

          并注释掉前面在添加ATL支持时VC自动加入的code:
            //#if !defined(_WIN32_WCE) || defined(_CE_DCOM)
           // Register class factories via CoRegisterClassObject().
           //if (FAILED(_AtlModule.RegisterClassObjects(CLSCTX_LOCAL_SERVER, REGCLS_MULTIPLEUSE)))
           // return FALSE;
           //#endif // !defined(_WIN32_WCE) || defined(_CE_DCOM)

     d. 在Exitinstance()中添加

Code
     一定要注释掉:_AtlModule.RevokeClassObjects();
posted on 2008-10-06 18:25  CheneySHI  阅读(3133)  评论(7编辑  收藏  举报