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

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

?? item.cpp

?? OPC客戶端源代碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
							// Append the formatted element data:
							strValue += szNum;

							// Terminate each row (except the last):
							if (++dwCol == dwCols)
								{
								if (i < dwSize - cbElements) 
									strValue += _T(" ] [ ");

								dwCol = 0;
								}
							}

						// End delimiter:
						strValue += _T(" ]");
						}

					// Else bad array data:
					else
						{
						strValue = _T("???");
						LogMsg (IDS_BADITEMARRAYDATA, GetItemID ());
						}
					}
					break;

				default:
					strValue = cStringContainer.m_lpszUnknown;
					break;
				}
			}
		
		// Else if data item is not an array:
		else
			{
			// Format output string according to data type:
			switch (m_vtValue.vt)
				{
				case VT_BOOL:
					wsprintf (szNum, _T("%d"), m_vtValue.boolVal ? 1 : 0);
					break;

				case VT_UI1:
					wsprintf (szNum, _T("%u"), m_vtValue.bVal);
					break;

				case VT_I1:
					wsprintf (szNum, _T("%d"), m_vtValue.cVal);
					break;

				case VT_UI2:
					wsprintf (szNum, _T("%u"), m_vtValue.uiVal);
					break;

				case VT_I2:
					wsprintf (szNum, _T("%d"), m_vtValue.iVal);
					break;

				case VT_UI4:
					wsprintf (szNum, _T("%u"), m_vtValue.ulVal);
					break;

				case VT_I4:
					wsprintf (szNum, _T("%d"), m_vtValue.lVal);
					break;

				case VT_R4:
					_stprintf (szNum, _T("%G"), m_vtValue.fltVal);
					break;

				case VT_R8:
					_stprintf (szNum, _T("%G"), m_vtValue.dblVal);
					break;

				case VT_BSTR:
					strValue = m_vtValue.bstrVal;
					return;

				default:
					strValue = cStringContainer.m_lpszUnknown;
					return;
				}

			strValue = szNum;
			}
		}

	// Else if item is inactive and/or invalid set value accordingly:
	else
		{
		strValue = cStringContainer.m_lpszUnknown;
		}
	}

// **************************************************************************
// GetQuality ()
//
// Description:
//	Returns a string representation of the current quality.
//
// Parameters:
//  none
//
// Returns:
//  LPCTSTR	- Pointer to quality string.
// **************************************************************************
LPCTSTR CKItem::GetQuality ()
	{
	// Create a CSafeLock to make this object thread safe.  Our critical
	// section gets locked here, and will automatically be unlocked when the
	// CSafeLock goes out of scope.
	CSafeLock cs (&m_csDataLock);

	// If item is active an valid, we can rely on server's data:
	if (IsValid ())
		{
		// Quality bits arranged QQSSSLL (each letter a bit).

		// Parse quality bits (omit limit bits) and output appropriate string:
		switch (m_wQuality & 0xFC)
			{
			case OPC_QUALITY_BAD_NON_SPECIFIC:
				return (cStringContainer.m_lpszQualityBad);

			case OPC_QUALITY_BAD_CONFIG_ERR0R:
				return (cStringContainer.m_lpszQualityBadConfigError);

			case OPC_QUALITY_BAD_NOT_CONNECTED:
				return (cStringContainer.m_lpszQualityBadNotConnected);

			case OPC_QUALITY_BAD_DEVICE_FAILURE:
				return (cStringContainer.m_lpszQualityBadDeviceFailure);

			case OPC_QUALITY_BAD_SENSOR_FAILURE:
				return (cStringContainer.m_lpszQualityBadSensorFailure);

			case OPC_QUALITY_BAD_LAST_KNOWN_VALUE:
				return (cStringContainer.m_lpszQualityBadLastKnownValue);

			case OPC_QUALITY_BAD_COMM_FAILURE:
				return (cStringContainer.m_lpszQualityBadCommFailure);

			case OPC_QUALITY_BAD_OUT_OF_SERVICE:
				return (cStringContainer.m_lpszQualityBadOutOfService);

			case OPC_QUALITY_UNCERTAIN_NON_SPECIFIC:
				return (cStringContainer.m_lpszQualityUncertain);

			case OPC_QUALITY_UNCERTAIN_LAST_USABLE_VALUE:
				return (cStringContainer.m_lpszQualityUncertainLastUsableValue);

			case OPC_QUALITY_UNCERTAIN_SENSOR_NOT_ACCURATE:
				return (cStringContainer.m_lpszQualityUncertainSensorNotAccurate);

			case OPC_QUALITY_UNCERTAIN_EU_UNITS_EXCEEDED:
				return (cStringContainer.m_lpszQualityUncertainEUExceeded);

			case OPC_QUALITY_UNCERTAIN_SUB_NORMAL:
				return (cStringContainer.m_lpszQualityUncertainSubnormal);

			case OPC_QUALITY_GOOD_NON_SPECIFIC:
				return (cStringContainer.m_lpszQualityGood);

			case OPC_QUALITY_GOOD_LOCAL_OVERRIDE:
				return (cStringContainer.m_lpszQualityGoodLocalOverride);

			default:
				return (cStringContainer.m_lpszQualityNoValue);
			}
		}

	// If we make it here, then item is invalid.  Return appropriate string:
	return (cStringContainer.m_lpszQualityNoValue);
	}

// **************************************************************************
// GetTimeStamp ()
//
// Description:
//	Returns a string representation of the current timestamp.
//
// Parameters:
//  CString		&strTimeStamp	Output string.
//
// Returns:
//  void
// **************************************************************************
void CKItem::GetTimeStamp (CString &strTimeStamp)
	{
	// Create a CSafeLock to make this object thread safe.  Our critical
	// section gets locked here, and will automatically be unlocked when the
	// CSafeLock goes out of scope.
	CSafeLock cs (&m_csDataLock);

	// Output timestamp if we are infact timestamped:
	if (m_bTimeStamped)
		{
		FILETIME ftLocal;

		// Convert raw timestamp from file time to local file time.
		// Proceed with next step in conversion only if successful.
		if (FileTimeToLocalFileTime (&m_ftTimeStamp, &ftLocal))
			{
			SYSTEMTIME systime;
			TCHAR szTime [64];

			// Convert file time to system time:
			if (FileTimeToSystemTime (&ftLocal, &systime))
				{
				// Format system time string:
				wsprintf (szTime, _T("%02d:%02d:%02d:%03d"), 
					systime.wHour, systime.wMinute, systime.wSecond, systime.wMilliseconds);			
				
				// Assign formatted system time string to output string:
				strTimeStamp = szTime;
				}
			
			// Conversion failed:
			else
				{
				ASSERT (FALSE);
				}
			}

		// Conversion failed:
		else
			{
			ASSERT (FALSE);
			}
		}

	// Else we are not timestamped so set timestamp to non-applicable:
	else
		strTimeStamp = cStringContainer.m_lpszNonApplicable;
	}

// **************************************************************************
// GetUpdateCount ()
//
// Description:
//	Returns the number of updates the item has recieved.
//
// Parameters:
//  none
//
// Returns:
//  DWORD - Current update count.
// **************************************************************************
DWORD CKItem::GetUpdateCount ()
	{
	// Create a CSafeLock to make this object thread safe.  Our critical
	// section gets locked here, and will automatically be unlocked when the
	// CSafeLock goes out of scope.
	CSafeLock cs (&m_csDataLock);

	// Return current update count:
	return (m_cdwUpdates);
	}


/////////////////////////////////////////////////////////////////////////////
// CKItem serialization
/////////////////////////////////////////////////////////////////////////////

// **************************************************************************
// Serialize ()
//
// Description:
//	Save or load item settings.
//
// Parameters:
//  CArchive		&ar			The archive to save or load item settings.
//
// Returns:
//  void
// **************************************************************************
void CKItem::Serialize (CArchive &ar)
	{
	// Saving object information:
	if (ar.IsStoring ())
		{
		// Save verion first so we will know how to read information later.
		// If format of data needs to change at some point, say we need
		// to add another property, then bump up the version number.
		ar << CURRENT_VERSION;						// current version

		// Save item access path:
		ar << m_strAccessPath;

		// Save full qualified item ID:
		ar << m_strItemID;

		// Save item active state:
		ar << m_bActive;

		// Save item data type:
		ar << m_vtDataType;

		// Save item access rights:
		ar << m_dwAccessRights;

		// Save flag bit field (we can add flags, for up to a total of 32 in
		// this case, without having to change version):
		ar.Write (&m_bfFlags, sizeof (m_bfFlags));
		}

	// Else loading object information:
	else
		{
		// Read version of saved information:
		DWORD dwSchema;
		ar >> dwSchema;

		// Read data according to version:
		switch (dwSchema)
			{
			case VERSION_1:
				ar >> m_strAccessPath;						// access path
				ar >> m_strItemID;							// fully qualified item ID
				ar >> m_bActive;							// active state
				ar >> m_vtDataType;							// data type
				ar >> m_dwAccessRights;						// access rights
				ar.Read (&m_bfFlags, sizeof (m_bfFlags));	// flags
				break;

			default:
				// Unexpected version.  Self-delete and throw achive exception:
				delete this;
				AfxThrowArchiveException (CArchiveException::badSchema);
				break;
			}
		}
	}

// **************************************************************************
// Copy ()
//
// Description:
//	Copy an instance of this class.  (Save properties to a shared memory file.)
//
// Parameters:
//  CFixedSharedFile	&sf		Shared memory file to copy properties to.
//
// Returns:
//  void
// **************************************************************************
void CKItem::Copy (CFixedSharedFile &sf)
	{
	int nLen;

	// To save a string to a shared memory file, we need to first save the
	// string length.  (CArchive objects, as in Serialize(), has this logic
	// built in.)

	// Save access path string:
	nLen = m_strAccessPath.GetLength ();
	sf.Write (&nLen, sizeof (nLen));
	sf.Write (m_strAccessPath, nLen * sizeof (TCHAR));

	// Save item ID string:
	nLen = m_strItemID.GetLength ();
	sf.Write (&nLen, sizeof (nLen));
	sf.Write (m_strItemID, nLen * sizeof (TCHAR));

	// Save active state:
	sf.Write (&m_bActive, sizeof (m_bActive));

	// Save data type:
	sf.Write (&m_vtDataType, sizeof (m_vtDataType));

	// Save access rights:
	sf.Write (&m_dwAccessRights, sizeof (m_dwAccessRights));

	// Save flag bit field:
	sf.Write (&m_bfFlags, sizeof (m_bfFlags));
	}

// **************************************************************************
// Paste ()
//
// Description:
//	Paste an instance of this class.  (Load properties from a shared memory file.)
//
// Parameters:
//  CFixedSharedFile	&sf		Shared memory file to paste properties from.
//
// Returns:
//  void
// **************************************************************************
void CKItem::Paste (CFixedSharedFile &sf)
	{
	int nLen;

	// To save a string to a shared memory file, we need to first save the
	// string length.  (CArchive objects, as in Serialize(), has this logic
	// built in.)  So to read the string back, we read its length first:

	// Read access path string:
	sf.Read (&nLen, sizeof (nLen));
	sf.Read (m_strAccessPath.GetBufferSetLength (nLen), nLen * sizeof (TCHAR));

	// Read item ID string:
	sf.Read (&nLen, sizeof (nLen));
	sf.Read (m_strItemID.GetBufferSetLength (nLen), nLen * sizeof (TCHAR));

	// Read active state:
	sf.Read (&m_bActive, sizeof (m_bActive));

	// Read data type:
	sf.Read (&m_vtDataType, sizeof (m_vtDataType));

	// Read access rights:
	sf.Read (&m_dwAccessRights, sizeof (m_dwAccessRights));

	// Read flag bit field:
	sf.Read (&m_bfFlags, sizeof (m_bfFlags));
	}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品动漫网站| 韩国三级在线一区| 日韩福利视频导航| youjizz久久| 久久亚洲一区二区三区明星换脸 | 国产一级精品在线| 91国产丝袜在线播放| 国产亚洲欧美日韩在线一区| 婷婷久久综合九色综合绿巨人| 丁香另类激情小说| 日韩一区二区三区在线视频| 性久久久久久久| 日本伦理一区二区| 国产精品国产a级| 国产九色精品成人porny| 日韩欧美国产综合一区| 性欧美疯狂xxxxbbbb| 91浏览器打开| 国产精品久久久久久久久快鸭 | 午夜电影久久久| 色综合久久久久久久| 国产欧美一区二区三区在线看蜜臀 | 91黄色免费网站| 国产精品人人做人人爽人人添 | 午夜亚洲福利老司机| 99国产精品国产精品久久| 久久久一区二区| 国产综合久久久久久鬼色| 欧美一级日韩免费不卡| 午夜精品视频一区| 欧美日韩亚洲国产综合| 亚洲精品少妇30p| 在线免费不卡视频| 一区二区三区中文免费| 日本精品视频一区二区三区| 亚洲精品免费看| 欧美在线免费播放| 婷婷激情综合网| 欧美一区二区三区视频免费播放| 日本 国产 欧美色综合| 91精品国产aⅴ一区二区| 天天综合天天综合色| 日韩一本二本av| 黄色日韩三级电影| 久久久高清一区二区三区| 久久精品国产成人一区二区三区 | 久久精品国产免费看久久精品| 欧美xxx久久| 成人动漫在线一区| 亚洲欧美日韩电影| 欧美日韩另类一区| 九色综合狠狠综合久久| 国产日产亚洲精品系列| youjizz久久| 亚洲gay无套男同| 精品三级av在线| 欧美亚洲丝袜传媒另类| 日本欧美在线看| 国产亲近乱来精品视频| 99视频热这里只有精品免费| 亚洲成人黄色影院| 久久久一区二区三区| 91国产福利在线| 国产呦萝稀缺另类资源| 中文字幕一区二区视频| 在线观看91av| 国产成a人无v码亚洲福利| 亚洲另类中文字| 久久伊人蜜桃av一区二区| 色噜噜久久综合| 国产成人免费视| 午夜精品一区在线观看| 国产精品丝袜91| 日韩三级视频在线观看| 99视频在线观看一区三区| 九色综合国产一区二区三区| 亚洲影视资源网| 26uuu精品一区二区| 欧美色综合久久| 国产91精品久久久久久久网曝门 | 亚洲欧美在线视频| 欧美丰满一区二区免费视频| 成人av网址在线观看| 蜜桃av一区二区在线观看| 一区二区不卡在线视频 午夜欧美不卡在| 精品三级av在线| 8x福利精品第一导航| 91麻豆精品秘密| 岛国精品一区二区| 免费成人在线视频观看| 亚洲国产综合在线| 亚洲欧洲精品天堂一级| 国产视频在线观看一区二区三区| 欧美久久久久久久久久| 日韩欧美区一区二| 欧美日韩一区 二区 三区 久久精品| 国产999精品久久久久久绿帽| 美女国产一区二区三区| 天天射综合影视| 亚洲电影在线免费观看| 怡红院av一区二区三区| 中文字幕在线视频一区| 欧美国产欧美亚州国产日韩mv天天看完整| 日韩美女天天操| 91精品国产福利在线观看| 欧美日韩一级二级| 欧美精选午夜久久久乱码6080| 色偷偷久久人人79超碰人人澡| 成人高清在线视频| av色综合久久天堂av综合| 国产91精品免费| 成人理论电影网| 成人av在线资源网站| 成人av在线播放网站| 99国产欧美久久久精品| 色呦呦网站一区| 91久久精品一区二区三| 在线视频国产一区| 在线观看区一区二| 4438成人网| 精品久久久网站| 日韩精品一区二区三区中文不卡| 日韩精品在线网站| 久久婷婷色综合| 国产精品色一区二区三区| 国产精品美女一区二区在线观看| 欧美国产禁国产网站cc| 亚洲色图制服诱惑 | 欧美一区二区三区在| 日韩欧美久久久| 亚洲国产cao| 天堂久久一区二区三区| 男男视频亚洲欧美| 国产精品一区二区黑丝| 91亚洲精华国产精华精华液| 欧洲国内综合视频| 欧美一卡二卡在线观看| 日本一区二区三区国色天香 | 欧美bbbbb| 国产成人一区在线| 色综合欧美在线视频区| 欧美嫩在线观看| 日本一区二区三区久久久久久久久不| 国产精品久久三区| 日本伊人午夜精品| 成人性视频网站| 在线不卡a资源高清| 久久婷婷色综合| 一区二区三区精品在线| 精品一区二区在线视频| 丁香婷婷综合色啪| 欧美精品免费视频| 中文字幕免费不卡在线| 日韩精品电影在线| 不卡一区二区在线| 91精品久久久久久久久99蜜臂| 国产亚洲欧美一区在线观看| 亚洲国产cao| 成人听书哪个软件好| 欧美一区二区在线免费观看| 国产精品久久久久久福利一牛影视| 亚洲成人在线免费| 成人美女视频在线观看18| 欧美一区二区在线免费播放| 亚洲视频免费在线观看| 久久国产精品99久久人人澡| 欧亚洲嫩模精品一区三区| 国产欧美精品一区二区三区四区 | 国产成人综合亚洲网站| 欧美日韩高清在线播放| 国产精品你懂的在线欣赏| 九色综合狠狠综合久久| 欧美乱妇20p| 一区av在线播放| 99精品1区2区| 久久久久久久精| 久久国产精品一区二区| 欧美日韩国产首页| 亚洲人成在线观看一区二区| 国产麻豆精品视频| 日韩精品一区二区三区四区| 丝袜诱惑制服诱惑色一区在线观看 | 欧美色区777第一页| 国产精品成人在线观看| 国产米奇在线777精品观看| 欧美一级一区二区| 日韩电影在线观看电影| 欧美日韩午夜在线视频| 亚洲一区中文日韩| 色婷婷精品久久二区二区蜜臂av | 久久99精品久久久久久久久久久久 | 日本一区二区三区免费乱视频| 狠狠色狠狠色综合| 欧美一区二区三区在| 欧美96一区二区免费视频| 欧美日韩另类国产亚洲欧美一级| 亚洲欧美aⅴ...| 在线看日韩精品电影| 亚洲高清免费一级二级三级| 在线观看视频一区二区|