我刚刚开始做一些Win32编程,我对这个功能感到困惑:
BOOL BuildCommDCB(LPCTSTR szSettings, LPDCB lpDCB);
LPDCB结构的描述指出"它指向DCB结构,其中控制设置信息是
返回&#34 ;.但我的问题是当返回值为BOOL
时,DCB结构是如何返回的?
答案 0 :(得分:3)
LPDCB
是您提供(1)的结构的指针,BuildCommDCB()
将填充该结构 as 返回成功指标。
这与功能没什么不同:
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}
(或者其他什么实际< / em>调用)内存模型,LP
代表长指针。
答案 1 :(得分:3)
使用Windows API,您通常可以通过查看变量名称和类型来判断某些内容。功能:
BOOL BuildCommDCB (LPCTSTR szSettings, LPDCB lpDCB);
有类型和参数:
LPCTSTR
又称C风格(Type)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 当然是设备的句柄。
答案 2 :(得分:0)
根据this,第二个参数是_Inout_ LPDCB lpDCB
,它是一个指针。这种情况就像指针/引用案例中的任何其他传递一样,其中使用引用