OPC Client 核心源码

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

好像技术一沾上工业,便有了很高的价值,大家三缄其口,谁都不点破这层窗户纸,好多的思路和源码都要从国外网站获得,国内总是有条件,有限制--就是不告诉你,怕教会徒弟,饿死师父吧。

研究了N天,开发了一个基于我的组态后台的OPC客户端驱动,考虑到驱动的特殊性,所以只开发了同步接口操作。测试一段时间后,还可以。现把核心代码公开出来,有点VC基础的人可以直接拿来用。

//*************************************************************************
//函 数 名:ConnectOPC
//所属类名:COPCClien
//输    入:CString SvrName
//输    出:
//功能描述:连接OPC服务器
//全局变量:
//调用模块:
//作    者:叶帆
//日    期:2005年12月1日
//修 改 人:
//日    期:
//版    本:
//*************************************************************************
long COPCClient::ConnectOPC(CString cSvrName)
{
    HRESULT hr;
 CLSID clsid;
 WCHAR wszProgID [512];

 //----------------------------------
 //初始化COM
 hr =CoInitialize(NULL);
 if (FAILED(hr))  return 8;           //com初始化失败
   
 //-----------------------------------
 if(strSvrName!="")        //判断是否已经连接OPC
 {
  if (strSvrName==cSvrName) return 2;  //OPC服务器已经连接
  else                      return 4;  //只能连接一个OPC服务器
 }
    //-----------------------------------

 try
 {
     
  //----------------------------------
  //把字符串形式的对象标识转化为CLSID结构形式
  _mbstowcsz (wszProgID, cSvrName, sizeof (wszProgID) / sizeof (WCHAR));
  hr= CLSIDFromProgID(wszProgID,    // [in]
       &clsid);      // [out]
  if(FAILED(hr))
  {
   CoTaskMemFree(&clsid);        //COM 内存释放函数
   CoUninitialize();             //终止COM库功能服务
   return 16;                    //获取clsid失败
  }
       
  //--------------------------------
  //创建Server实例
  hr=CoCreateInstance(clsid,       //[in]
     NULL,                //[in]
     CLSCTX_SERVER,       //[in]
     IID_IUnknown,        //[in]
     (void**)&pUNK);      //[out]

  if(FAILED(hr))
  {
   CoTaskMemFree(&clsid);
      if(pUNK) pUNK->Release();
   pUNK=NULL;
   CoUninitialize();
   return 32;                   //创建Server实例失败
  }
 
  //------------------------------------
  //查询pOPC接口
  hr=pUNK->QueryInterface(IID_IOPCServer,// [in]
        (void**)&pOPC);// [out]
  if(FAILED(hr))
  {
   CoTaskMemFree(&clsid);
   if(pOPC) pOPC->Release();
   if(pUNK) pUNK->Release();
   pOPC=NULL;
   pUNK=NULL;
   return 64;                   //查询pOPC接口失败
  }

  CoTaskMemFree(&clsid);

   

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值