Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 理解C++;示例-打印机、句柄、字符串_C++_Visual C++_Printing - Fatal编程技术网

C++ 理解C++;示例-打印机、句柄、字符串

C++ 理解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位/字

我在以下代码中遇到了一些问题:

请在评论中查找问题编号

问题1

  • 当我设置了
    hPrinter=null
    时,那么
    和hPrinter
    是什么意思
问题2

  • (LPTSTR)\u T
    表示什么?(见T)
问题3

  • 这里的null表示什么
问题4

  • RAW
    是什么意思(它是什么类型的数据?)
问题5

  • 1
    在这里表示什么
  • &hPrinter
    hPrinter
    变量的地址。您需要传递它,以便
    OpenPrinter
    函数可以在其中写入打印机的实际句柄

  • \u T
    根据编译设置将字符串转换为正确的ANSI(8位/字符)或Unicode(16位/字符)表示形式。基本上,它是一个宏,可以扩展为零(ANSI)或
    L
    (Unicode)加上实际字符串

  • 这里,代码中的什么地方
    NULL
    是一个宏,它扩展到(基本上)
    0
    。它用于提供一个合适的默认值

  • 原始数据就是它听起来的,原始数据。它不是以任何方式构造的,它只是传递给(通常)设备的一堆字节

  • 发件人:

    pDocInfo指向的结构的版本。此值必须为1

  • &hPrinter
    是符号
    hPrinter
    占用的内存空间的地址。例如,如果
    hPrinter
    的值存储在地址0x1000(不太可能!),那么从0x1000开始的四个(或八个或更多;句柄被定义为PVOID,因此在不同的体系结构中它会有所不同)字节将包含值0(NULL)。换句话说,
    hPrinter
    的值可能为空,但它仍然有一个地址,并且仍然占用内存空间

    编辑:我的答案可能不是你想要的。
    OpenPrinter
    (向其传递
    hPrinter
    的地址)的第二个参数实际上是一个输出参数,而不是一个输入参数。对于C被限制为一个返回值,并且大多数Win32 API函数返回一个状态值,这是一个常见的解决方法。
    OpenPrinter
    功能成功完成后,它将接收打印机句柄

  • 宏确定项目是否配置为使用Unicode,并相应地解释字符串文字;看

  • pOutputFile描述为:

    指向以null结尾的字符串的指针,该字符串指定输出文件的名称。要打印到打印机,请将其设置为NULL

    换句话说:当打印到打印机而不是文件时,将其设置为NULL。NULL通常表示指针类型上下文中的“无值”

  • 最好由别人来回答

  • 有关更多信息,请参见,但基本上:

    pDocInfo指向的结构的版本。此值必须为1

    。。。所以如果我是你,我就不会太担心了

  • 当我设置hPrinter=null时,&hPrinter是什么意思

    当您传递&hPrinter时,意味着您正在将句柄的地址传递给api,以便api将分配一个句柄并将其放入hPrinter中

    (LPTSTR)表示什么?(见T)


    _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;