簡體   English   中英

BuildCommDCB實際做什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM