发表于:2007-02-12 12:18:00
楼主
OPC服务器实际上就是一种COM组件,以下是一个OPC客户程序调用OPC服务器对象的关键性代码,创建一个OPCServer对象的实例并请求指向这个对象m_IOPCServer接口指针。
HRESULT hr; // 首先声明一个接受CoCreateInstance()返回值的HRESULT
bool m_bComInitialized;
IOPCServer* m_IOPCServer;// 指向IID_IOPCServer接口的指针
hr= CoInitialize(NULL)//初始化COM库
m_bComInitialized = SUCCEEDED (hr);
if (!m_bComInitialized)
{
return (FALSE);//如果初始化COM库失败,程序就不必向下执行
}
//通过ProgID,查找注册表中的相关CLSID,
//NAPOPC.Svr是台湾泓格科技有限公司OPC服务器的ProgID,通过//CLSIDFromProgID获得对象的clsid
hr = CLSIDFromProgID(L"NAPOPC.Svr", &clsid);
if (hr != S_OK)
{
AfxMessageBox("获取CLSID失败");
CoUninitialize();//调用CoUninitialize函数释放COM库的资源
return (FALSE);
}
//创建OPC服务器对象,并查询对象的IID_IOPCServer接口
hr = CoCreateInstance ( clsid, //coclass的CLSID
NULL, //不是用聚合
CLSCTX_LOCAL_SERVER, //服务器类型
IID_IOPCServer, //接口的IID
(void**) &m_IOPCServer); //指向接口的指针
if ( SUCCEEDED ( hr ) )
{
//用m_IOPCServer调用其它的方法
}
else
{
//不能创建OPC服务器对象
AfxMessageBox("创建OPC服务器对象失败");
CoUninitialize();//调用CoUninitialize函数释放COM库的资源
}
调用CoCreateInstance()来创建新的OPC服务器对象。如果hr接收到一个表示成功的代码,即S_OK,则SUCCEEDED宏返回TRUE,否则返回FALSE。FAILED是一个与SUCCEEDED对应的宏用来检查失败代码。