各位老鸟请进,帮我看一个问题,

csdn_风中雪狼 2011-03-07 12:22:08
各位老鸟,情况是这样的,我将DynaPDF 2.5(一个操作PDF的控件包)中VB.NET下一段程序(这段程序主要是对PDF文档进行查找与替换操作)移植到VB6.0下,
移植完成后,问题就出来,其程序在VB6.0下运行结果不正确,每次替换的结果后面都会多一个字符出来.


图一 我要操作的PDF文档和查找的字符



图二 在VB6.0下替换的结果



图三 替换正确的结果



图四 在VB6.0下替换其它字符的结果.

我想问的,出现这种情况的原因有那些,是跟计算坐标有关,还是跟读取内存有关 还是有些对象没有释放干净造成的.请各位帮我想下原因. 这个问题我调试了几天了,都没有找到原因,谢谢,
顶者也有分
...全文
287 41 打赏 收藏 转发到动态 举报
写回复
用AI写文章
41 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2011-03-11
  • 打赏
  • 举报
回复
[Quote=引用 40 楼 dianyancao 的回复:]
引用 38 楼 weishaolin131083 的回复:

应该是编码问题,.NET通常是用 UTF-8,而VB是 Unicode,
你把编码搞对应该就行了。
[/Quote]
VB6 UTF8转码请参考这个
Private Declare Function MultiByteToWideChar Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByRef lpMultiByteStr As Any, ByVal cchMultiByte As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long) As Long
Private Declare Function WideCharToMultiByte Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long, ByRef lpMultiByteStr As Any, ByVal cchMultiByte As Long, ByVal lpDefaultChar As Long, ByVal lpUsedDefaultChar As Long) As Long
'常用的代码页:
const cpUTF8 =65001
const cpGB2312 = 936
const cpGB18030=54936
const cpUTF7 =65000
Function MultiByteToUTF16(UTF8() As Byte, CodePage As Long) As String
Dim bufSize As Long
bufSize = MultiByteToWideChar(CodePage, 0&, UTF8(0), UBound(UTF8) + 1, 0, 0)
MultiByteToUTF16 = Space(bufSize)
MultiByteToWideChar CodePage, 0&, UTF8(0), UBound(UTF8) + 1, StrPtr(MultiByteToUTF16), bufSize
End Function

Function UTF16ToMultiByte(UTF16 As String, CodePage As Long) As Byte()
Dim bufSize As Long
Dim arr() As Byte
bufSize = WideCharToMultiByte(CodePage, 0&, StrPtr(UTF16), Len(UTF16), 0, 0, 0, 0)
ReDim arr(bufSize - 1)
WideCharToMultiByte CodePage, 0&, StrPtr(UTF16), Len(UTF16), arr(0), bufSize, 0, 0
UTF16ToMultiByte = arr
End Function

Private Sub Command1_Click()
MsgBox MultiByteToUTF16(UTF16ToMultiByte("ab中,c", cpUTF8), cpUTF8)
End Sub


赵4老师 2011-03-09
  • 打赏
  • 举报
回复
改用不定长字节数组试试?
Dim bstr() as Byte
Dim L as Long
L=LenB(strconv("2010",vbFromUnicode))-1
ReDim bstr(L)
bstr=strconv("2010",vbFromUnicode)
csdn_风中雪狼 2011-03-09
  • 打赏
  • 举报
回复
[Quote=引用 29 楼 dianyancao 的回复:]
MIdB(your_code_string, start, length_of_2002) = "2010": 'unioncode or asci?
[/Quote]
这样不行哦,

csdn_风中雪狼 2011-03-09
  • 打赏
  • 举报
回复
[Quote=引用 31 楼 clear_zero 的回复:]
为什么不联系控件开发商呢,这样不就可以知道原因方便修改了么
[/Quote]
给控件商发邮件了,不过没有回信
dianyancao 2011-03-09
  • 打赏
  • 举报
回复
[Quote=引用 38 楼 weishaolin131083 的回复:]

应该是编码问题,.NET通常是用 UTF-8,而VB是 Unicode,
你把编码搞对应该就行了。
[/Quote]
weishaolin131083 2011-03-09
  • 打赏
  • 举报
回复
应该是编码问题,.NET通常是用 UTF-8,而VB是 Unicode,
你把编码搞对应该就行了。
波导终结者 2011-03-09
  • 打赏
  • 举报
回复
没看到代码,估计是没有\0结束符造成的,后面多的字符串是之前使用过的内存。你把要替换为的内容,后面并上一个\0结束符试试。
dianyancao 2011-03-09
  • 打赏
  • 举报
回复
http://hi.csdn.net/tiger_zhaoPPPPPPPPPPPPPPPPPPP
csdn_风中雪狼 2011-03-08
  • 打赏
  • 举报
回复
呵呵,谢谢jjhhgg1111的帮忙,
我也找不出来是什么原因.这个cpdf类是它已经存存的.
每次查找与替换不一样的字符时,还是有问题,

布衣散人 2011-03-08
  • 打赏
  • 举报
回复
WriteTextMatrixExW = pdfWriteTextMatrixExW(m_Instance, Matrix, s, LenB(StrConv(s, vbFromUnicode)) / 2) <> 0
这样可以达到目的,但不清楚是否有道理,呵呵

布衣散人 2011-03-08
  • 打赏
  • 举报
回复
程序挺多,还涉及了好多dynapdf的api,没有时间仔细看,猜测是超出了你应该截取的位数导致的。

WriteTextMatrixExW = pdfWriteTextMatrixExW(m_Instance, Matrix, s, LenB(s) / 2 - 2) <> 0
这样写就是2010了,加了“-2”,但是不是建立在看明白程序的基础上,瞎折腾得,呵呵
yakejkl 2011-03-08
  • 打赏
  • 举报
回复
好高端……要加油了……
clear_zero 2011-03-08
  • 打赏
  • 举报
回复
为什么不联系控件开发商呢,这样不就可以知道原因方便修改了么
dianyancao 2011-03-08
  • 打赏
  • 举报
回复
MIdB(your_code_string, start, length_of_2002) = "2010": 'unioncode or asci?
csdn_风中雪狼 2011-03-08
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 zhao4zhong1 的回复:]
改用定长字符串试试?
[/Quote]
使用定长的不行,因为每次查找与替换的字符都不是固定的.
赵4老师 2011-03-08
  • 打赏
  • 举报
回复
改用定长字符串试试?
weishaolin131083 2011-03-07
  • 打赏
  • 举报
回复
全部用二进制处理吧
csdn_风中雪狼 2011-03-07
  • 打赏
  • 举报
回复
由于最多只能给100分,问题原因找到了,另开贴再谢各位
csdn_风中雪狼 2011-03-07
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 veron_04 的回复:]
楼主威武!
[/Quote]
巫师已经V5不起来了哟
巫师帮下我呀,帮我看看呀,
贝隆 2011-03-07
  • 打赏
  • 举报
回复
楼主威武!
加载更多回复(17)

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧