亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? dlgopcserverlist.cpp

?? OPC Client 源代碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// DlgOPCServerList.cpp : implementation file
//

#include "stdafx.h"
#include "TYOPCClient.h"
#include "DlgOPCServerList.h"
#include "DlgOPCPC.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

//const CLSID CLSID_OpcServerList = {0x13486D51,0x4821,0x11D2,{0xA4,0x94,0x3C,0xB3,0x06,0xC1,0x00,0x00}};
//const IID IID_IOPCServerList = {0x13486D50,0x4821,0x11D2,{0xA4,0x94,0x3C,0xB3,0x06,0xC1,0x00,0x00}};

//版本號----可以從規范中查到
//#ifndef CATID_OPCDAServer10
static const CLSID CATID_OPCDAServer10 = 
{ 0x63d5f430, 0xcfe4, 0x11d1, { 0xb2, 0xc8, 0x0, 0x60, 0x8, 0x3b, 0xa1, 0xfb } };
// {63D5F430-CFE4-11d1-B2C8-0060083BA1FB}
//#endif

//#ifdef CATID_OPCDAServer20
static const CLSID CATID_OPCDAServer20 = 
{ 0x63d5f432, 0xcfe4, 0x11d1, { 0xb2, 0xc8, 0x0, 0x60, 0x8, 0x3b, 0xa1, 0xfb } };
// {63D5F432-CFE4-11d1-B2C8-0060083BA1FB}
//#endif

//#ifndef CATID_OPCDAServer30

static const CLSID CATID_OPCDAServer30 = 
{ 0xCC603642, 0x66D7, 0x48f1, { 0xb6, 0x9a, 0xb6, 0x25, 0xe7, 0x36, 0x52, 0xd7 } };
//[uuid(CC603642-66D7-48f1-B69A-B625E73652D7)] interface CATID_OPCDAServer30
//#endif
//--------------------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------

//------------------------
static LPCTSTR lpszDataAccessServers10 = _T("OPC Data Access Servers Version 1.0");
static LPCTSTR lpszDataAccessServers20 = _T("OPC Data Access Servers Version 2.0");
static LPCTSTR lpszDataAccessServers30 = _T("OPC Data Access Servers Version 3.0");
// image list indices
#define ILI_REMPC	    0
#define ILI_CATAGORY	1
#define ILI_COMPONENT	2
#define ILI_INTERFACE	3
//
//--------------------------------------------------------------------------------------------------------------
#define WM_TIMER_OPCBROWSE_EVENT 1000
#define WM_TIMER_OPCBROWSE_TIME   100
/////////////////////////////////////////////////////////////////////////////
// CDlgOPCServerList dialog


CDlgOPCServerList::CDlgOPCServerList(CWnd* pParent /*=NULL*/)
	: CDialog(CDlgOPCServerList::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDlgOPCServerList)
	m_strID = _T("");
	m_strOPCName = _T("");
	m_strNote = _T("");
	//}}AFX_DATA_INIT

	m_pcOPCMgt=NULL;
	m_pcMapOPCBrowse=NULL;
	m_pSelOPCBrowse=NULL;
	m_pSelOPCInfo=NULL;

	m_bNameChanged=FALSE;
	m_nSelItem=OPC_PC;
	m_hSelItem=NULL;

	m_unOPCVersion=0;
}


void CDlgOPCServerList::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDlgOPCServerList)
	DDX_Control(pDX, IDC_REFLASH, m_ctrlReflash);
	DDX_Control(pDX, IDC_EDIT_NAME, m_ctrlName);
	DDX_Control(pDX, IDC_STATIC_ID, m_ctrlID);
	DDX_Control(pDX, IDC_TREE_OPCSERVER, m_ctrlTreeOPC);
	DDX_Text(pDX, IDC_EDIT_PROGID, m_strID);
	DDX_Text(pDX, IDC_EDIT_NAME, m_strOPCName);
	DDX_Text(pDX, IDC_EDIT_USETYPE, m_strNote);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CDlgOPCServerList, CDialog)
	//{{AFX_MSG_MAP(CDlgOPCServerList)
	ON_NOTIFY(TVN_SELCHANGED, IDC_TREE_OPCSERVER, OnSelchangedTreeOPCServer)
	ON_BN_CLICKED(IDC_ADD, OnAddOPCPC)
	ON_BN_CLICKED(IDC_MODIFY, OnModify)
	ON_EN_CHANGE(IDC_EDIT_NAME, OnChangeEditName)
	ON_BN_CLICKED(IDC_REFLASH, OnReflash)
	ON_WM_TIMER()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDlgOPCServerList message handlers

BOOL CDlgOPCServerList::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	CenterWindow();	//居中

	CWnd* pBtnOK=GetDlgItem (IDOK);
	if(pBtnOK)
		pBtnOK->EnableWindow (FALSE);


	// Initialize the image list for the interfaces. The bitmap must use a 
	// purple background color, RGB (255, 0, 255), so that the CImageList
	// object can construct a mask.  The images are 16x16 pixels.  Set the
	// image list background color to CLR_NONE so masked pixels will be
	// transparent. 
	// Image number		Use
	//	0				not used
	//	1				not used
	//	2				Interface
	m_cImageList.Create (IDB_BROWSEOPC, 16, 4, RGB (255, 0, 255));
	m_cImageList.SetBkColor (CLR_NONE);
	m_ctrlTreeOPC.SetImageList (&m_cImageList, TVSIL_NORMAL);


	CWnd* pBtn;
	pBtn=GetDlgItem (IDC_MODIFY);
	pBtn->EnableWindow (FALSE);

	SetTimer(WM_TIMER_OPCBROWSE_EVENT,WM_TIMER_OPCBROWSE_TIME,NULL)	;

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CDlgOPCServerList::QueryOPCServer(HTREEITEM hParent,CLSID clsIDVersion)
{
	CLSID clsid;
	clsid = CLSID_OpcServerList;	//在opcenum_i.c中定義
   
	DWORD clsctx;
	clsctx = CLSCTX_LOCAL_SERVER;	//本地服務
	clsctx = CLSCTX_ALL;			//本地\遠程服務
	try{
/*
	//*****************************************************************************
	//方法1:采用智能指針
	IOPCServerListPtr gpOPC;		//只能使用本地服務標示
	//
	// 創建OPC服務器的瀏覽器對象-----
	HRESULT hr=gpOPC->CreateInstance (clsid,NULL,clsctx) ;
	if(FAILED(hr))
	{
		_com_issue_error(hr);
		
		//本地服務
		clsctx = CLSCTX_LOCAL_SERVER;	
		hr=gpOPC.CreateInstance (clsid,NULL,clsctx) ;
		if(FAILED(hr))
		{
			_com_issue_error(hr);
			return;
		}
	}
//*/
	//*****************************************************************************
	//方法2:采用普通接口
	IOPCServerList *gpOPC = NULL;
	IID IIDOPCServerList=IID_IOPCServerList;	//在opcenum_i.c中定義
	// 創建OPC服務器的瀏覽器對象-----
	HRESULT hr = CoCreateInstance(clsid, NULL, clsctx,IIDOPCServerList ,(void**)&gpOPC);	

	if(S_OK!=hr)
		return;
	//*****************************************************************************


	
	// 查詢OPC DA組件目錄接口指針
	IOPCEnumGUID *pEnumGUID;
	
	hr = gpOPC->EnumClassesOfCategories( 
		1, &clsIDVersion, 
		1, &clsIDVersion, 
		(IEnumGUID**)&pEnumGUID); 
	if(S_OK!=hr)
		return;

	//獲得支持OPC DA數據服務器的CLSID
	unsigned long c;
	while (S_OK == pEnumGUID->Next(1, &clsid, &c)) 
	{
		LPOLESTR pszProgID;
		LPOLESTR pszUserType;
		hr = gpOPC->GetClassDetails(&clsid, &pszProgID, &pszUserType);

		//打印OPC數據服務器的有關信息
		TRACE("ProgID = %ls, UserType = %ls\n", pszProgID, pszUserType);
#ifdef _UNICODE
		m_ctrlTreeOPC.InsertItem (wszProgID, ILI_COMPONENT, ILI_COMPONENT, hParent);
#else
		TCHAR szProgID [DEFBUFFSIZE];

		_wcstombsz (szProgID, pszProgID, sizeof (szProgID) / sizeof (TCHAR));
		m_ctrlTreeOPC.InsertItem (szProgID, ILI_COMPONENT, ILI_COMPONENT, hParent);
#endif
		CoTaskMemFree(pszProgID);
		CoTaskMemFree(pszUserType);
//		SysFreeString(pszProgID);	//Error
//		SysFreeString(pszUserType);
	}
	}catch(...)
	{
		printf("\n創建組件異常錯誤!\n");
	}
}

void CDlgOPCServerList::OnSelchangedTreeOPCServer(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
	// TODO: Add your control notification handler code here

	//判斷是否修改
	NameChanged();

	//判斷選項
	HTREEITEM hOPCPCItem=NULL;
	HTREEITEM hOPCVerItem=NULL;
	HTREEITEM hOPCItem=pNMTreeView->itemNew.hItem;
	m_hSelItem=hOPCItem;

	BOOL bBTN_OK=FALSE;

	// 判斷選擇的是否為子項(ProgID):
	hOPCVerItem=m_ctrlTreeOPC.GetParentItem (hOPCItem);
	if(hOPCVerItem)
		hOPCPCItem=m_ctrlTreeOPC.GetParentItem (hOPCVerItem);

	if (hOPCPCItem != NULL)
	{
		//得到選擇項文本(ProgID):
		COPCInfo* pOPCInfo=(COPCInfo *)m_ctrlTreeOPC.GetItemData (hOPCItem);
		m_pSelOPCInfo=pOPCInfo;

		m_strID=pOPCInfo->m_strProgID ;
		m_strNote=pOPCInfo->m_strUserType ;
		m_strOPCName=pOPCInfo->m_strName ;

		m_ctrlID.SetWindowText(_T("ProgID"));

		//得到OPC Browse
		m_pSelOPCBrowse=(COPCBrowse *)m_ctrlTreeOPC.GetItemData (hOPCPCItem);

		//得到 OPC VERSION
		m_unOPCVersion=m_ctrlTreeOPC.GetItemData (hOPCVerItem);

		//Update controls:
		bBTN_OK=TRUE;
		//確保選擇內容可見:
		m_ctrlTreeOPC.EnsureVisible (pNMTreeView->itemNew.hItem); 
		m_ctrlName.EnableWindow(TRUE);

		m_nSelItem=OPC_SERVER;
		m_ctrlReflash.EnableWindow(FALSE);
	}
	else if(hOPCVerItem==NULL)
	{	//OPC PC
		m_pSelOPCInfo=NULL;
		m_pSelOPCBrowse=(COPCBrowse *)m_ctrlTreeOPC.GetItemData (hOPCItem);
		
		m_strOPCName = m_pSelOPCBrowse->m_strPCName ;
		m_strID = m_pSelOPCBrowse->m_strPCIP ;
		m_strNote=m_pSelOPCBrowse->m_strNote ;
		m_ctrlID.SetWindowText(_T("IP :"));
		m_ctrlReflash.EnableWindow(TRUE);

		if(m_strOPCName==LOACAL_PC_NAME)
			m_ctrlName.EnableWindow(FALSE);
		m_nSelItem=OPC_PC;
	}
	else
	{
		m_strID = _T("");
		m_strOPCName = _T("");
		m_strNote = _T("");
		
		bBTN_OK=FALSE;
		m_pSelOPCInfo=NULL;
		m_nSelItem=OPC_NULL;

		m_ctrlReflash.EnableWindow(FALSE);
	}
	UpdateData (FALSE);

	m_strOldOPCName=m_strOPCName;
	//使OK鍵
	CWnd* pBtn;
	pBtn=GetDlgItem (IDOK);
	pBtn->EnableWindow (bBTN_OK);
	
	pBtn=GetDlgItem (IDC_EDIT_PROGID);	//ES_READONLY   
	pBtn->EnableWindow (bBTN_OK);

	pBtn=GetDlgItem (IDC_EDIT_USETYPE);
	pBtn->EnableWindow (bBTN_OK);

	*pResult = 0;
}

void CDlgOPCServerList::SetOPCBrowse(COPCManagement *pcOPCMgt)
{
	m_pcOPCMgt=pcOPCMgt;
	m_pcMapOPCBrowse=pcOPCMgt->GetOPCBrowse ();
}

//查詢OPC SERVER 
bool CDlgOPCServerList::QueryOPCServer(CString *pstrPC, CString *pstrIP,COPCBrowse*& pOPCBrowse)
{
	CLSID clsid;
	clsid = CLSID_OpcServerList;	//在opcenum_i.c中定義
   
	DWORD clsctx;
	clsctx = CLSCTX_LOCAL_SERVER;	//本地服務
	clsctx = CLSCTX_ALL;			//本地\遠程服務
	try{
		//*****************************************************************************
		//方法2:采用普通接口
		IOPCServerList *gpOPC = NULL;
		IID IIDOPCServerList=IID_IOPCServerList;	//在opcenum_i.c中定義
		// 創建OPC服務器的瀏覽器對象-----
		HRESULT hr;
		//hr= CoCreateInstance(clsid, NULL, clsctx,IIDOPCServerList ,(void**)&gpOPC);	

		MULTI_QI multiIID;

		multiIID.pItf = NULL;
		multiIID.hr = 0;
		multiIID.pIID= &IIDOPCServerList;

		if(strcmp(*pstrPC,LOACAL_PC_NAME)==0)				//本地計算機
		{
			hr = CoCreateInstanceEx (
				clsid,										// CLSID
				NULL,										// No aggregation
				clsctx,										// connect to local, inproc and remote servers
				NULL,										// remote machine name 
				1,											// number of IIDS to query		
				&multiIID);									// array of IID pointers to query
		}
		else												//遠程計算機
		{
			COSERVERINFO tCoServerInfo;
			ZeroMemory (&tCoServerInfo, sizeof (tCoServerInfo));

			// Allocate memory for the machine name string:
			int nSize = pstrIP->GetLength () * sizeof (WCHAR);
			tCoServerInfo.pwszName = new WCHAR [nSize];

			// Check validity of pointer.  If it's bad, there's no point in continuing:
			if (!tCoServerInfo.pwszName)
			{
				ASSERT (FALSE);
				return (false);
			}

			// Copy the machine name string into the server info structure:
	#ifdef _UNICODE
			// For Unicode builds, the contents of m_strRemoteMachine will
			// already be in wide character format, as demanded by COM, so
			// copy it as is.
			lstrcpyn (tCoServerInfo.pwszName, pstrIP, nSize);
	#else 
			// For ANSI builds, the contents of m_strRemoteMachine will not
			// be in wide character format, as demanded by COM, so we need
			// to reformat:
			mbstowcs (tCoServerInfo.pwszName, *pstrIP, nSize);
	#endif//_UNICODE
			hr = CoCreateInstanceEx (
				clsid,										// CLSID
				NULL,										// No aggregation
				clsctx,										// connect to local, inproc and remote servers
				&tCoServerInfo,								// remote machine name 
				1,											// number of IIDS to query		
				&multiIID);									// array of IID pointers to query
			
			delete [] tCoServerInfo.pwszName;
		}
		if(!SUCCEEDED (hr))
			return false;
		if(SUCCEEDED (multiIID.hr))
		{
			pOPCBrowse=new COPCBrowse;
			//OPC1.0
			TRACE("BrowsOPCServer OPC3.0\n");
			QueryOPCServer(pOPCBrowse->m_cMapOPC10, 
				(IOPCServerList*)multiIID.pItf ,CATID_OPCDAServer10);
			//OPC2.0
			TRACE("BrowsOPCServer OPC3.0\n");
			QueryOPCServer(pOPCBrowse->m_cMapOPC20,
				(IOPCServerList*)multiIID.pItf ,CATID_OPCDAServer20);
			//OPC3.0
			TRACE("BrowsOPCServer OPC3.0\n");
			QueryOPCServer(pOPCBrowse->m_cMapOPC30,
				(IOPCServerList*)multiIID.pItf ,CATID_OPCDAServer30);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜精品爽啪视频| 久久九九久精品国产免费直播| 中文字幕欧美国产| 国产成人av电影在线观看| 久久精品网站免费观看| 国产精品99久久久久久久女警| 国产欧美一区二区精品仙草咪| 成人午夜看片网址| 亚洲精品成a人| 欧美久久久久久久久中文字幕| 婷婷综合另类小说色区| 欧美大片一区二区| 国产福利一区二区三区视频 | 国产成人免费网站| 国产精品午夜免费| 欧美性大战久久久久久久蜜臀 | 欧美成人欧美edvon| 久久精品免费观看| 中文字幕精品三区| 欧美日韩久久一区| 国产一区二区三区免费播放| 国产精品久久久久9999吃药| 在线免费观看日韩欧美| 久久国产婷婷国产香蕉| 国产精品欧美极品| 欧美日韩精品一区视频| 国产精品综合av一区二区国产馆| 综合电影一区二区三区 | www.亚洲精品| 亚洲国产sm捆绑调教视频| 精品国产91久久久久久久妲己 | 国产精品一卡二卡| 亚洲精品中文字幕在线观看| 欧美一区二区三区视频| 东方欧美亚洲色图在线| 五月婷婷激情综合| 国产精品三级视频| 日韩一级视频免费观看在线| 成人性生交大片| 日韩激情av在线| 亚洲欧美色一区| 国产片一区二区| 8x福利精品第一导航| 菠萝蜜视频在线观看一区| 日韩av电影一区| 亚洲人成精品久久久久| 国产色产综合色产在线视频| 欧美日韩久久不卡| 一本色道久久综合狠狠躁的推荐| 久久99深爱久久99精品| 亚洲图片欧美综合| 日韩毛片一二三区| 久久久久高清精品| 91精品国产日韩91久久久久久| 色综合天天天天做夜夜夜夜做| 国产一区二区精品久久91| 亚洲va天堂va国产va久| 亚洲区小说区图片区qvod| 欧美极品xxx| 久久综合久久综合九色| 69堂国产成人免费视频| 欧洲一区在线观看| 91在线码无精品| 成人av资源网站| 国产成人精品午夜视频免费| 欧美aa在线视频| 日韩精品亚洲一区| 视频一区在线播放| 午夜精品福利视频网站| 亚洲午夜久久久久中文字幕久| 亚洲欧美影音先锋| 国产精品久久久久久久久免费丝袜| 欧美精品一区在线观看| 欧美电影免费观看高清完整版 | 亚洲大片在线观看| 亚洲成人免费影院| 亚洲自拍偷拍综合| 亚洲国产精品一区二区尤物区| 一区二区三区高清不卡| 怡红院av一区二区三区| 亚洲精品视频在线看| 亚洲女同一区二区| 亚洲国产日韩a在线播放性色| 亚洲一区中文日韩| 午夜精品福利在线| 久久国产婷婷国产香蕉| 国产真实乱偷精品视频免| 国产一区二区三区在线观看精品 | 久久机这里只有精品| 麻豆成人久久精品二区三区红 | 中文字幕免费在线观看视频一区| 久久精品欧美一区二区三区麻豆| 国产亚洲一区二区三区在线观看| 欧美精品一区二区三区蜜桃| 久久久亚洲欧洲日产国码αv| 国产欧美日韩精品a在线观看| 中文字幕乱码一区二区免费| 国产精品久久精品日日| 亚洲免费看黄网站| 天天色综合天天| 另类小说图片综合网| 国产精品一区二区久激情瑜伽| 国产一区日韩二区欧美三区| 东方aⅴ免费观看久久av| 色屁屁一区二区| 91精品国模一区二区三区| 久久综合狠狠综合| 一区在线播放视频| 亚洲午夜精品网| 国产综合色在线视频区| 91天堂素人约啪| 这里是久久伊人| 欧美国产国产综合| 午夜视频一区二区三区| 国产精一品亚洲二区在线视频| 欧美中文字幕一二三区视频| 日韩一卡二卡三卡| 亚洲丝袜另类动漫二区| 奇米影视一区二区三区小说| 成人丝袜18视频在线观看| 欧美日韩一区高清| 日本一区二区三区电影| 日欧美一区二区| www.av精品| 精品免费99久久| 亚洲成a人v欧美综合天堂 | 99久久久国产精品免费蜜臀| 欧美在线不卡一区| 国产亚洲综合色| 亚洲成年人影院| 97超碰欧美中文字幕| 欧美成人精品二区三区99精品| 亚洲欧美日韩中文播放| 国产乱码精品一区二区三区av| 欧美日韩免费高清一区色橹橹| 欧美国产日韩一二三区| 免费人成网站在线观看欧美高清| 91天堂素人约啪| 亚洲国产电影在线观看| 久久国产精品99精品国产| 在线精品亚洲一区二区不卡| 亚洲国产高清aⅴ视频| 美女视频网站久久| 欧美日韩精品一区二区三区 | 美腿丝袜亚洲色图| 欧美在线视频日韩| 亚洲欧洲综合另类| 不卡一区二区中文字幕| 久久尤物电影视频在线观看| 日韩电影一区二区三区四区| 欧美亚洲另类激情小说| 日韩美女视频19| 99久久精品99国产精品| 国产日韩v精品一区二区| 久久草av在线| 日韩欧美一区二区在线视频| 日韩精品成人一区二区在线| 欧美专区日韩专区| 一区二区三区波多野结衣在线观看 | 亚洲电影一区二区三区| 色播五月激情综合网| 中文字幕一区二区三中文字幕| 国产一区二区美女诱惑| 亚洲精品在线观看视频| 国产呦精品一区二区三区网站| 91麻豆精品久久久久蜜臀| 天堂影院一区二区| 精品婷婷伊人一区三区三| 亚洲福利一二三区| 欧美日韩亚洲综合一区二区三区| 亚洲一卡二卡三卡四卡无卡久久| 精品视频资源站| 亚洲va欧美va国产va天堂影院| 欧美日韩一区小说| 免费观看91视频大全| 欧美大片在线观看一区| 国产一区二区网址| 国产精品福利一区二区三区| 成人精品免费网站| 亚洲毛片av在线| 欧美日韩国产美| 日本成人在线电影网| 精品久久人人做人人爰| 国产久卡久卡久卡久卡视频精品| 国产精品丝袜一区| 91免费看视频| 石原莉奈在线亚洲二区| 日韩午夜激情av| 国产成人精品在线看| 成人免费一区二区三区在线观看| 一本到不卡精品视频在线观看| 亚洲与欧洲av电影| 日韩欧美国产一区在线观看| 国内外成人在线| 亚洲欧美影音先锋| 欧美一区二区精品| 高清国产午夜精品久久久久久| 一区二区三区欧美视频| 日韩一区二区电影| 92精品国产成人观看免费|