在VB6中的打印机上进行Unicode打印
我试图在打印机上打印Unicode(中文)字符串(实际上是PDFCreator),但我得到的只是字符的垂直打印 我使用从在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在屏幕上工作得非常好 有人能帮我解决这个问
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)
注
notStrPtr
StrConv(…,vbUnicode)
forDeclare
具有textout
ByVal-lpStringU,只要长
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)