我是一名JavaScript开发者,所以请对我宽容点!我正在尝试编写一小段C++代码来实现在框架上打印的功能。我正在使用Unicode进行编译,根据我的研究,这可能是导致问题的原因。
我认为这是一个相对简单的事情,但我可能把它复杂化了。应用程序包含一个std::string
,其中包含当前打印机的名称。脚本首先检查是否未设置它(如果未设置,则使用GetDefaultPrinter
输出一个LPTSTR
)。最后,脚本将std::string
或LPTSTR
转换为LPCTSTR
以供CreateDC
使用。
以下是我的代码:
std::string PrinterName = window->getPrinter();
LPDWORD lPrinterNameLength;
LPWSTR szPrinterName;
LPCTSTR PrinterHandle;
if (PrinterName == "unset") {
GetDefaultPrinter( szPrinterName, &lPrinterNameLength );
PrinterHandle = szPrinterName; //Note sure the best way to convert here
} else {
PrinterHandle = PrinterName.c_str();
}
HDC hdc = CreateDC( L"WINSPOOL\0", PrinterHandle, NULL, NULL);
在编译时,我只得到转换错误,例如
无法将参数2从LPDWORD *转换为LPDWORD(GetDefaultPrinter)
以及
从'const char *'无法转换为'LPCTSTR'(在PrinterHandle = PrinterName.c.str()行)
我已经在SO上进行了相当多的研究,但没有得出具体的解决方案。
非常感谢您的帮助!
szPrinterName
分配了内存。哦,算了,它没有。你需要修复它并传递你拥有的内存。 - chriswindow->getPrinter()
是否有办法返回宽字符串而不是现在返回的窄字符串?如果可以,那么有一个比转换更合理的解决方案。 - chrisstd::wstring
代替std::string
。 - ildjarn