【发布时间】:2013-01-25 21:22:10
【问题描述】:
我是一名 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在函数中获得分配给它的内存。哦,没关系,它没有。你会想要解决这个问题并传递你拥有的内存。 -
@chris 确实如此-我只是将其省略了,因为它实际上不在问题的范围内。 :)
-
@hmjd 轰隆隆!完成了一个。谢谢!
-
window->getPrinter()有没有办法返回一个宽字符串而不是它现在返回的窄字符串?如果是这样,那么有一个比转换更有意义的解决方案。 -
使用
std::wstring而不是std::string。
标签: c++ winapi variables unicode