在VB6中的打印机上进行Unicode打印

在VB6中的打印机上进行Unicode打印,unicode,printing,vb6,cjk,Unicode,Printing,Vb6,Cjk,我试图在打印机上打印Unicode(中文)字符串(实际上是PDFCreator),但我得到的只是字符的垂直打印 我使用从gdi32.dll导入的textowu函数: TextOutW dest.hDC, x, y, StrConv(szText, vbUnicode), Len(szText) 如果我试着打印“0.12”(如果我打印汉字,我会得到同样的结果),我得到 如果使用dest.Print功能,则无法打印Unicode 不管怎样,textouth在屏幕上工作得非常好 有人能帮我解决这个问

我试图在打印机上打印Unicode(中文)字符串(实际上是PDFCreator),但我得到的只是字符的垂直打印

我使用从
gdi32.dll
导入的
textowu
函数:

TextOutW dest.hDC, x, y, StrConv(szText, vbUnicode), Len(szText)
如果我试着打印“0.12”(如果我打印汉字,我会得到同样的结果),我得到

如果使用
dest.Print
功能,则无法打印Unicode

不管怎样,
textouth
在屏幕上工作得非常好


有人能帮我解决这个问题吗?

szText的定义是什么?是VB6字符串吗?在这种情况下,请尝试

Private Declare Function  Lib "gdi32" Alias "TextOutW" ( _
  ByVal hdc As Long, ByVal x As Long, ByVal y As Long, _
  ByVal lpStringU As Long, ByVal nCount As Long) As Long  

TextOutW dest.hDC, x, y, StrPtr(szText), Len(szText) 

  • StrPtr
    not
    StrConv(…,vbUnicode)
  • Declare
    for
    textout
    具有
    ByVal-lpStringU,只要长

是的,它是一个vb6字符串,不起作用。结果是一系列方块和不可读的字符。正如我想用UNICODE函数打印ANSI字符串一样。您是如何将ANSI字符串输入到
szText
??VB6字符串通常包含Unicode数据。你能把
文本的
声明
贴出来吗?(另请参阅我对答案的编辑。)我认为您可能正在向StrConv
发送一个Unicode字符串,该字符串调用ANSI->Unicode转换。这将在字符串中产生大量Unicode空字符。然后,VB6运行时可能会隐式地将Unicode转换回ANSI(如果您的
Declare
ByVal lpsz As String
)。这可能会生成一个Unicode字符串,但包含大量空Unicode字符。然后,您的“打印机”上的文本对齐行为可能与屏幕上的不同,因此空Unicode字符可能对“打印机”产生不同的影响,使用lpStringU的“Long”类型也是至关重要的。ASCII等效API声明使用字符串。@WarrenRox是,绝对是。这才是关键。
Private Declare Function  Lib "gdi32" Alias "TextOutW" ( _
  ByVal hdc As Long, ByVal x As Long, ByVal y As Long, _
  ByVal lpStringU As Long, ByVal nCount As Long) As Long  

TextOutW dest.hDC, x, y, StrPtr(szText), Len(szText)