BuildCommDCB实际做什么
what does BuildCommDCB actually do?
本文关键字:什么 BuildCommDCB 更新时间:2023-10-16
我刚刚开始做一些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 %dn", i1, i2);
将输出:
13 42
(1)从Windows的最早的日子开始,当我们不得不忍受奇怪的x86 {tiny, small, medium, large, huge, gargantuan}
(或者不管它们实际上是 叫什么)内存模型时,LP
代表长指针。
使用Windows API,您通常可以通过查看变量名称和类型来判断某事是什么。功能:
BOOL BuildCommDCB (LPCTSTR szSettings, LPDCB lpDCB);
有类型和参数:
-
LPCTSTR
又名指向c风格(类型)字符串的长指针。该类型实际上是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
}
引用:
- <
- 窗口类型/gh>
- BuildCommDCB在MSDN
1您确实定义了unicode,对吗?
2一个警告,BOOL
不是bool
3当然是设备的句柄
按此,第二个参数是_Inout_ LPDCB lpDCB
,它是一个指针。这种情况类似于任何其他通过指针/引用传递的情况,其中使用引用
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 警告处理为错误这里有什么问题
- 什么时候调用组成单元对象的析构函数
- #定义c-预处理器常量..我做错了什么
- 努力将整数转换为链表。不知道我在这里做错了什么
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 什么时候在C++中返回常量引用是个好主意
- 当在同一名称空间中有两个具有相同签名的函数时,会发生什么
- C++避免重复声明的语法是什么
- c++库的公共头文件中应该包含什么
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 有什么方法可以遍历结构吗
- 当类在C++中定义时,有什么方法可以"register"类吗?
- ifstream什么都没读
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- C++从另一个类访问公共静态向量的正确方法是什么
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- 我应该使用什么来代替void作为变体中的替代类型之一
- BuildCommDCB实际做什么