亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
www成人在线观看| 亚洲成人精品一区二区| 尤物av一区二区| 国产麻豆日韩欧美久久| 在线视频欧美区| 国产三级一区二区| 开心九九激情九九欧美日韩精美视频电影 | 国产精品伦一区| 日韩不卡在线观看日韩不卡视频| 91小视频在线| 国产欧美一区二区精品久导航| 图片区小说区国产精品视频| 色综合久久久久久久久| 国产拍揄自揄精品视频麻豆| 麻豆精品久久久| 欧美群妇大交群中文字幕| 日韩一区在线看| 成人一道本在线| 欧美经典三级视频一区二区三区| 日本 国产 欧美色综合| 欧美精品tushy高清| 亚洲一级二级在线| 欧美在线小视频| 亚洲综合偷拍欧美一区色| 色狠狠色噜噜噜综合网| 亚洲精品高清在线观看| 91在线小视频| 亚洲伦理在线免费看| 色呦呦网站一区| 亚洲国产成人高清精品| 欧美在线你懂得| 亚洲777理论| 日韩视频一区二区| 国内国产精品久久| 国产欧美一区二区在线| 成人av免费网站| 成人免费视频在线观看| 91高清视频免费看| 婷婷综合久久一区二区三区| 欧美疯狂做受xxxx富婆| 青青草91视频| 国产亚洲精品bt天堂精选| 成人黄色大片在线观看| 亚洲美女免费视频| 欧美日韩午夜在线视频| 三级影片在线观看欧美日韩一区二区| 69精品人人人人| 激情综合网最新| 国产精品国产三级国产普通话99 | 麻豆国产精品一区二区三区| 精品国产乱子伦一区| 国产精品88av| 亚洲免费在线观看视频| 欧美日韩国产123区| 久久91精品久久久久久秒播| 久久久99精品免费观看不卡| 不卡的av在线播放| 一区二区成人在线观看| 欧美乱妇一区二区三区不卡视频| 美女网站色91| 国产精品国产自产拍高清av| 欧美日韩三级视频| 国产精品亚洲第一区在线暖暖韩国| 中文字幕在线不卡一区二区三区| 欧美三级中文字| 国产精品99久久久久久似苏梦涵 | 欧美体内she精视频| 久久99精品国产91久久来源| 欧美激情在线观看视频免费| 欧美伊人精品成人久久综合97| 久久精品国产**网站演员| 1024成人网| 精品乱码亚洲一区二区不卡| 色久综合一二码| 国产一区二区三区精品视频| 亚洲精品视频在线看| 精品捆绑美女sm三区| 欧洲一区在线电影| 风间由美一区二区三区在线观看| 亚洲午夜精品久久久久久久久| 久久综合久久久久88| 欧美视频一区二区三区四区| 国产99久久久国产精品免费看| 婷婷激情综合网| 一区二区三区中文在线观看| 久久久亚洲国产美女国产盗摄 | 成人免费视频一区| 久久精品国内一区二区三区| 亚洲一区二区在线播放相泽| 国产日韩精品一区二区三区| 91麻豆精品国产91久久久使用方法 | 一区二区三区国产精华| 久久精品一区二区三区不卡牛牛| 欧美日韩国产一级| 在线视频一区二区免费| 91视频免费播放| 国产传媒日韩欧美成人| 国产在线视频不卡二| 日本在线不卡一区| 亚洲成人av免费| 亚洲一区在线免费观看| 一区二区三区四区国产精品| 国产精品蜜臀在线观看| 中文字幕不卡的av| 国产午夜精品在线观看| 精品国产精品一区二区夜夜嗨| 777a∨成人精品桃花网| 欧美精品精品一区| 精品视频1区2区3区| 欧美系列日韩一区| 欧美日韩一级视频| 69精品人人人人| 日韩视频在线观看一区二区| 91麻豆精品国产91久久久使用方法| 欧美体内she精视频| 欧美日韩国产综合一区二区| 欧美精品日韩一区| 欧美精品18+| 日韩你懂的电影在线观看| 日韩免费福利电影在线观看| 欧美电视剧免费全集观看| 日韩欧美一二三区| 久久欧美一区二区| 国产精品嫩草影院com| 亚洲视频电影在线| 午夜欧美视频在线观看| 日韩中文欧美在线| 国产在线精品国自产拍免费| 国产黄色91视频| 99国产精品久久久久久久久久| 91成人免费网站| 欧美精品v日韩精品v韩国精品v| 91精品国产综合久久福利| 精品久久久久久久久久久院品网| 久久这里只精品最新地址| 中文字幕欧美激情| 亚洲一区欧美一区| 看国产成人h片视频| eeuss鲁片一区二区三区在线观看| 一本一本大道香蕉久在线精品 | 92精品国产成人观看免费| 欧美三片在线视频观看 | 91麻豆精品国产| 精品国产123| 中文字幕一区二区三区精华液| 亚洲高清在线视频| 国产麻豆欧美日韩一区| 91麻豆国产自产在线观看| 91精品国产综合久久久久久漫画| 精品成人a区在线观看| 中文字幕字幕中文在线中不卡视频| 一区二区三区不卡在线观看 | 亚洲国产视频直播| 狠狠色综合日日| 在线观看日产精品| 久久久国产精品麻豆| 亚洲第一av色| 97精品国产97久久久久久久久久久久| 欧美无砖专区一中文字| 精品国产一区二区三区忘忧草| 综合久久一区二区三区| 久久99日本精品| 欧美日韩国产综合久久 | 欧美国产日产图区| 人禽交欧美网站| 日本电影亚洲天堂一区| 中文一区在线播放| 免费成人在线视频观看| 欧美午夜一区二区| 亚洲欧洲国产日本综合| 九九国产精品视频| 欧美精品久久99久久在免费线| 亚洲欧洲精品一区二区三区 | 在线一区二区三区四区五区| 久久久久88色偷偷免费| 日本少妇一区二区| 欧美性受xxxx| 综合久久久久久| 国产精品原创巨作av| 日韩一区二区高清| 视频一区在线视频| 91久久国产综合久久| 日韩毛片视频在线看| 国产激情一区二区三区桃花岛亚洲| 欧美一区二区视频在线观看2022| 亚洲麻豆国产自偷在线| av在线不卡免费看| 国产精品久久久一本精品 | 欧美性xxxxx极品少妇| 亚洲免费观看在线视频| 成人性生交大片免费看中文| 久久久久久久综合日本| 国产麻豆日韩欧美久久| 久久久另类综合| 国产高清亚洲一区| 中文在线资源观看网站视频免费不卡| 国产精品66部| 欧美激情资源网| 成人h动漫精品一区二区| 中文字幕av一区二区三区高|