cannot convert ‘ipp_tag_e’ to ‘ipp_t*’ {aka ‘_ipp_s*’} 153 | response = cupsDoRequest(CUPS_HTTP_DEFAULT, "localhost:631", ippNewRequest(IPP_OP_GET_JOB_ATTRIBUTES), ippAddInteger(IPP_TAG_OPERATION, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-id", job_id), NULL);
时间: 2023-08-23 20:03:45 浏览: 256
这个错误通常是由于函数参数类型不匹配导致的。在 CUPS 2.3.1 中,`cupsDoRequest` 函数的第三个参数应该是一个 `ipp_t *` 类型的指针,而不是一个 `ipp_tag_e` 类型的枚举值。
以下是一个修复后的示例代码:
```c
#include <cups/cups.h>
void getPrintJobPageCount(int jobId) {
ipp_t *request, *response;
ipp_attribute_t *attr;
int page_count = 0;
// 创建一个 Get-Job-Attributes 请求
request = ippNewRequest(IPP_OP_GET_JOB_ATTRIBUTES);
ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_JOB, "job-id", jobId);
response = cupsDoRequest(CUPS_HTTP_DEFAULT, "localhost:631", request, NULL);
// 获取打印任务的打印页数
if ((attr = ippFindAttribute(response, "job-printed-page-count", IPP_TAG_INTEGER)) != NULL) {
page_count = ippGetInteger(attr, 0);
}
ippDelete(request);
ippDelete(response);
printf("Print job %d has %d pages\n", jobId, page_count);
}
```
在这个修复后的代码中,我们将 `ippNewRequest` 函数的返回值直接传递给了 `cupsDoRequest` 函数,而不是将枚举值传递给它。我们还使用 `ippAddInteger` 函数向请求添加了 job-id 参数。
请注意,这个代码中的 `localhost:631` 地址是 CUPS 默认的 HTTP 地址,也可以根据你的实际情况进行调整。
阅读全文