C++ 理解C++;示例-打印机、句柄、字符串
我在以下代码中遇到了一些问题: 请在评论中查找问题编号 问题1C++ 理解C++;示例-打印机、句柄、字符串,c++,visual-c++,printing,C++,Visual C++,Printing,我在以下代码中遇到了一些问题: 请在评论中查找问题编号 问题1 当我设置了hPrinter=null时,那么和hPrinter是什么意思 问题2 (LPTSTR)\u T表示什么?(见T) 问题3 这里的null表示什么 问题4 RAW是什么意思(它是什么类型的数据?) 问题5 1在这里表示什么 &hPrinter是hPrinter变量的地址。您需要传递它,以便OpenPrinter函数可以在其中写入打印机的实际句柄 \u T根据编译设置将字符串转换为正确的ANSI(8位/字
- 当我设置了
时,那么hPrinter=null
是什么意思和hPrinter
表示什么?(见T)(LPTSTR)\u T
- 这里的null表示什么
是什么意思(它是什么类型的数据?)RAW
在这里表示什么1
&hPrinter
是hPrinter
变量的地址。您需要传递它,以便OpenPrinter
函数可以在其中写入打印机的实际句柄\u T
根据编译设置将字符串转换为正确的ANSI(8位/字符)或Unicode(16位/字符)表示形式。基本上,它是一个宏,可以扩展为零(ANSI)或L
(Unicode)加上实际字符串NULL
是一个宏,它扩展到(基本上)0
。它用于提供一个合适的默认值&hPrinter
是符号hPrinter
占用的内存空间的地址。例如,如果hPrinter
的值存储在地址0x1000(不太可能!),那么从0x1000开始的四个(或八个或更多;句柄被定义为PVOID,因此在不同的体系结构中它会有所不同)字节将包含值0(NULL)。换句话说,hPrinter
的值可能为空,但它仍然有一个地址,并且仍然占用内存空间
编辑:我的答案可能不是你想要的。OpenPrinter
(向其传递hPrinter
的地址)的第二个参数实际上是一个输出参数,而不是一个输入参数。对于C被限制为一个返回值,并且大多数Win32 API函数返回一个状态值,这是一个常见的解决方法。OpenPrinter
功能成功完成后,它将接收打印机句柄_T()是一个宏,在Unicode构建中,他们将L放在字符串文字之前以使其变宽,而在非Unicode中,则不执行任何操作 hPrinter是一个参考参数,这意味着函数可以更改函数调用中涉及的实际参数。当然,它(在幕后)是作为指针实现的,所以
int j;
int &i = j
// realy is:
int *i = &j;
通过将&i放在&i前面获取地址,计算结果为“幕后”指针的值
_T(“hello world”)是编译器定义的宏,在unicode构建的情况下,它可能以宽字符格式返回“hello world”。或者在ANSI构建的情况下,char中的“helloworld”
要回答其余问题,请查阅文档,或等待其他人回答您的问题 阅读所用函数的MSDN文档将至少回答问题3和5。您的问题是否特定于此方法和
startDocInter()
,以及它们接受的值的有效范围,或者是诸如强制转换、&
之类的概念,以及诸如字符串“RAW”、int值为1和null值之类的数据类型?我通常感到困惑,我不明白为什么我们必须将值设置为1。毫无疑问,他们说你必须设置=1@Suhail:发送除1以外的内容,查看发生了什么,然后报告。正如@interjay所说,阅读MSDN文档将回答所有问题。Win32 API是基于C的,因此不允许引用参数,因为它们是针对C++的。&是运算符的良好旧C地址。如果您查看OpenPrinter的声明,您将看到lphPrinter参数被声明为LPHANDLE,它扩展为句柄指针。ANSI C也支持引用类型,但如果windows api使用它们,我不是舒尔。无论如何,谢谢你的评论。
int j;
int &i = j
// realy is:
int *i = &j;