[英]what does BuildCommDCB actually do?
我剛剛開始做一些Win32編程,我對該函數感到困惑:
BOOL BuildCommDCB(LPCTSTR szSettings, LPDCB lpDCB);
LPDCB結構的描述指出“它指向返回控制設置信息的DCB結構”。 但是我的問題是,當返回值為BOOL
時,如何返回DCB結構?
LPDCB
指向您提供的結構(1)的指針 ,並且BuildCommDCB()
將填充該結構, 並返回成功指示符。
它與函數沒有什么不同:
int setTo13AndReturn42 (int *pInt) {
*pInt = 13;
return 42;
}
當使用以下命令調用時:
int i1 = -1;
int i2 = setTo13AndReturn42 (&i1);
printf ("%d %d\n", i1, i2);
將輸出:
13 42
(1)在Windows的初期 ,當我們有一起離奇的x86遭受{tiny, small, medium, large, huge, gargantuan}
(或任何他們實際上是所謂的)內存模式, LP
站在長期指針。
使用Windows API,通常可以通過查看變量名稱和類型來分辨出什么。 功能:
BOOL BuildCommDCB (LPCTSTR szSettings, LPDCB lpDCB);
具有類型和參數:
LPCTSTR
又名C型(類型)STRing長指針。 該類型實際上是TCHAR*
,如果您已將UNICODE定義為1,則該類型最終為wchar_t*
。 變量名稱為您提供了其他提示( sz
或字符串,以零結尾)。 Unicode字符串為LPCWSTR
。 LPDCB
代表指向DCB的長指針。 在定義它的標頭中,類型定義為DCB*
(同樣,變量名對此進行了補充。) 因此該函數需要一個字符串和一個指向結構的指針(將其視為通過引用傳遞的一種形式),並返回BOOL
2來告訴您它是否成功。 如果不成功,則表明尚未設置DCB
的值,因此不應使用它們。
並不總是遵循這些規則,但是它們通常足以使您無需過多的工作就可以將API類型轉換為C類型。
例如,如果我告訴您HMODULE
是模塊句柄,那么您應該知道HDEVICE
3是什么。
像往常一樣,有關函數功能以及對參數的期望的信息的最佳位置是MSDN。 該文檔說lpDCB
參數是,
指向接收信息的DCB結構的指針。
將此知識與示例函數一起使用:
DCB dcb;
if (BuildCommDCB(L"Settings", &dcb))
{
// dcb is valid.
}
else
{
// dcb is uninitialized garbage
}
參考文獻:
1您確實定義了unicode,對嗎?
2警告, BOOL
不是bool
3當然是設備的手柄。
這樣 ,第二個參數是_Inout_ LPDCB lpDCB
,它是一個指針。 這種情況就像其他任何通過指針/引用傳遞的情況一樣,其中使用引用從函數返回信息
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.