包含clyjscl的詞條

本文目錄一覽:

解釋一下這段程序

小弟只有10年VC++經驗,幫你解讀一下哦: 滿意的話麻煩給我分.

如下代碼是為了實現: 接收串口過來的數據! 首先初始化一個泛型類型接受容器, 接收串口接口發來的數據,然後顯示在界面上的edit控件上!

VARIANT variant_inp; 用VARIANT 泛型變量類型 定義一個數組變量variant_inp; 泛型就是任何類型都可以放進去的意思. 作為緩衝池使用很適合.

COleSafeArray safearray_inp; 用COleSafeArray用OLE安全數據容器類 定義一個對象名字是 safearray inp 因為VARIANT雖然可以放任何類型數據到這個數組中,但該類型沒有豐富的處理成員函數,說白了他是結構體不是類, 所以 需要做個轉換, 轉為COleSafeArray類型的數組類即可. 他具有非常豐富的成員函數.

那麼, 你會問為什麼不直接讓safearray_inp=m_ctrlComm.GetInput(); 讀緩衝區,而要經過一個中間變量呢?

variant_inp=m_ctrlComm.GetInput(); 讀緩衝區

safearray_inp=variant_inp; VARIANT轉換成COleSafeArray型變量

VARIANT和COleSafeArray 是什麼關係呢?

原因是:

這中間有調用不同的重載=運算符,m_ctrlComm.GetInput(); 的數據可以轉化為variant_inp,有默認的轉化方式,而safearray_inp=variant_inp則是另一個轉化方式,如果直接轉,可能數據不對。

VARIANT和COleSafeArray 一個是結構體,一個是類,各自的數據構造不一樣。

long k=0; 初始化一個長整型變量 k=0;

int len; 定義長度len,整數型.

BYTE rxdata[2048]; 定義接受數據的數組,2k大小,2048字節. 為BYTE類型,也即unsigned char類型.

CString strtemp; 定義一個CString類型的字符串strtemp;

if(m_ctrlComm.GetCommEvent()) 如果控制通信對象m_ctlComm有get的事件發生,

{

————————

這裡應該加switch(ret) , 將上面getcommevent賦值給ret.

case 2: 事件值為2表示接收緩衝區內有字符

{

variant_inp=m_ctrlComm.GetInput(); 控制通信器對象得到輸入數據流. 如果GetCommEvent返回2,說明有字符到達了, 接收緩衝區內有字符

safearray_inp=variant_inp; 將variant inp轉換為COleSafeArray 類型,付給safearry inp. 因為COleSafeArray提供了豐富的函數處理.符合我們的需要.

len=safearray_inp.GetOneDimSize(); 獲取輸入安全數組的長度len

for(k=0;klen;k++) 做個循環,

{

safearray_inp.GetElement(k,rxdata+k); 從輸入的安全數組到rxdata進行數據拷貝. 一次一個字節拷貝.

}

for(k=0;klen;k++) 做個循環. 讀取len長度的所有字節.

{

BYTE bt=*(char*)(rxdata+k); 內存 rxdata 起始地址+k字節偏移的指針 取值,得到 一個字節.

strtemp.Format(“%c”,bt); strtemp賦值為bt,也就是一個字符.

m_strEditRXData+=strtemp; m_strEdit這個CEdit控件顯示一直加長.

}

}

UpdateData(FALSE); 將內存變量數據更新到界面.

====================

參考:

VARIANT

C++、BASIC、Java、Pascal、Script……計算機語言多種多樣,而它們各自又都有自己的數據類型,COM

產生目的,其中之一就是要跨語言(注3)。而 VARIANT

數據類型就具有跨語言的特性,同時它可以表示(存儲)任意類型的數據。從C語言的角度來講,VARIANT

其實是一個結構,結構中用一個域(vt)表示——該變量到底表示的是什麼類型數據,同時真正的數據則存貯在 union

空間中。結構的定義太長了(雖然長,但其實很簡單)大家去看 MSDN 的描述吧,這裡給出如何使用的簡單示例:

學生:我想用 VARIANT 表示一個4字節長的整數,如何做?

老師:VARIANT v; v.vt=VT_I4; v.lVal=100;

學生:我想用 VARIANT 表示布爾值“真”,如何做?

老師:VARIANT v; v.vt=VT_BOOL; v.boolVal=VARIANT_TRUE;

學生:這麼麻煩?我能不能 v.boolVal=true; 這樣寫?

老師:不可以!因為

 

類型

字節長度

假值

真值

bool

1(char)

0(false)

1(true)

BOOL

4(int)

0(FALSE)

1(TRUE)

VT_BOOL

2(short int)

0(VARIANT_FALSE)

-1(VARIANT_TRUE)

所以如果你 v.boolVal=true 這樣賦值,那麼將來 if(VARIANT_TRUE==v.boolVal)

的時候會出問題(-1 !=

1)。但是你注意觀察,任何布爾類型的“假”都是0,因此作為一個好習慣,在做布爾判斷的時候,不要和“真值”相比較,而要與“假值”做比較。

學生:謝謝老師,你太牛了。我對老師的敬仰如滔滔江水,連綿不絕……

學生:我想用 VARIANT 保存字符串,如何做?

老師:VARIANT v; v.vt=VT_BSTR; v.bstrVal=SysAllocString(L”Hello,你好”);

學生:哦……我明白了。可是這麼操作真夠麻煩的,有沒有簡單一些的方法?

老師:有呀,你可以使用現成的包裝類 CComVariant、COleVariant、_variant_t。比如上面三個問題就可以這樣書寫:CComVariant v1(100),v2(true),v3(“Hello,你好”); 簡單了吧?!(注4)

學生:老師,我再問最後一個問題,我如何用 VARIANT 保存一個數組?

老師:這個問題很複雜,我現在不能告訴你,我現在告訴你怕你印象不深……(注5)

學生:~!@#$%^*()……暈!

VARIANT 數據類型在文件OAIDL.IDL中定義如下:

struct tagVARIANT {

union {

struct __tagVARIANT {

VARTYPE vt;

WORD wReserved1;

WORD wReserved2;

WORD wReserved3;

union {

ULONGLONG ullVal;

LONGLONG llVal;

LONG lVal;

BYTE bVal;

SHORT iVal;

FLOAT fltVal;

DOUBLE dblVal;

VARIANT_BOOL boolVal;

_VARIANT_BOOL bool;

SCODE scode;

CY cyVal;

DATE date;

BSTR bstrVal;

IUnknown * punkVal;

IDispatch * pdispVal;

SAFEARRAY * parray;

BYTE * pbVal;

SHORT * piVal;

LONG * plVal;

LONGLONG * pllVal;

FLOAT * pfltVal;

DOUBLE * pdblVal;

VARIANT_BOOL *pboolVal;

_VARIANT_BOOL *pbool;

SCODE * pscode;

CY * pcyVal;

DATE * pdate;

BSTR * pbstrVal;

IUnknown ** ppunkVal;

IDispatch ** ppdispVal;

SAFEARRAY ** pparray;

VARIANT * pvarVal;

PVOID byref;

CHAR cVal;

USHORT uiVal;

ULONG ulVal;

INT intVal;

UINT uintVal;

DECIMAL * pdecVal;

CHAR * pcVal;

USHORT * puiVal;

ULONG * pulVal;

ULONGLONG * pullVal;

INT * pintVal;

UINT * puintVal;

struct __tagBRECORD {

PVOID pvRecord;

IRecordInfo * pRecInfo;

} __VARIANT_NAME_4;

} __VARIANT_NAME_3;

} __VARIANT_NAME_2;

DECIMAL decVal;

} __VARIANT_NAME_1;

};

給水管網中JSCL是什麼井的簡稱

你好,很高興為你解答。

JS代表:給水

CL這個通用含義是:中心線(center line)

當然有的設計院有自己的命名規則,所以你要結合圖紙去看

如何建一個類似於這樣的網站http://www.cljsjjyw.com/yjptc/啊?

首先你得取得這個網站的FTP管理權,然後你得有一套為YJPTC準備的網站程序,要麼你就直接獲取cljsjjyw.com的數據與程序。程序在本機調試完成後,上傳到站點的yjptc目錄下邊,設置好默認的訪問文件如:index.htm/index.asp/default.php等。。就可以在瀏覽器里直接訪問了。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/293220.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-26 13:13
下一篇 2024-12-26 13:13

相關推薦

發表回復

登錄後才能評論