少数字符乱码:请帮我看看如何将string转化为pansichar,并向Dll传递 char*参数

lantianbaiyuan1 2017-01-09 07:13:24
...................
解决了,有人留言就结贴给分。。。
部分特殊字符,超过GBk的, pansichar 经过c++的Dll函数处理返回后 ,delphi跟踪器是显示为乱码,跟踪每个字节发现其实不是,转化一下即可。另外发现utf8string和ansistring赋值编译器不自动转化?需要强制转化,utf8string和string之间赋值编译器会自动转化。看来以前遇到的类似问题也是如此!!
好几次了总是在卡在恶心人的小问题上,用着不顺手,现在调试时用着还死机呢。找不到确定原因,很多方面有影响。
还有次跟踪delphi系统源码,加入断点运行,停下后把鼠标移动到变量,想看看debug提示,结果马上死机,以为是巧合,重复无数遍,只要加断点,鼠标一移动到变量上就死机,屡试不爽,可惜没记哪个系统单元文件。我肯定xe的调试器一定有大问题!
还有一次发现程序无故运行不起来,直接退出,有时行有时又不行,以为是自己的问题,最后一点一点排除,最后发现竟然是32位环境的中文路径竟然有bug!!都这年代了还出这问题。。。。
还有次发现厂商推崇的FDA有严重的bug,简单sql语句插入数据丢字符!,写了很多公共FDA的函数,结果全部作废,老外不知道有个地方叫中国吗?。
最近想尝试用用webservice,不知道现在性能怎么样了,想想还是不要冒险了。。。。
还有现在的ctrl+F设计的好难用,找不到时会弹出提示框,确定关闭后焦点直接落入编辑环境,总是按照d5的习惯用,回车直接就敲了,结果就代码断行了。delphi5的用着很顺手,查找界面在一起,找全部文件或者当前文件页签快捷键来回切换就行,当前页找不到直接就找所有文件了,现在设计的是ctrl+shift+f,好难用,。
再吐个槽,就是帮助帮助,这个我要疯了,这什么人才设计的!!
帮助调出来后鼠标选中文字,ctrl+c拷贝代码 alt+tab切换回delphi,ctrl+v粘贴,晕菜,发现根本拷不上!剪贴板旧的内容直接就糊到代码中了。非得用鼠标右键复制才行,现在都有强迫症了,要多按几次鼠标才放心,就担心copy不上。
还有64位下的opendialog打开怎么这么慢,32位的怎么就没问题?
多好的工具,让他们糟蹋成玩具了。
溜溜帖看论坛常见的几个的大号,啥都懂啥都解决不好,回答问题避重就轻,看那留言多不着调。倒是有些不常露面的大中号二话不说人就直接解决问题,这个版块上来问个问题还不如直接查大富翁呢,用delphi的离了大富翁没法干活。
...全文
1731 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
lantianbaiyuan1 2017-05-26
  • 打赏
  • 举报
回复
顺便再记录一个问题,关闭运行的程序后再编译,经常不能生成exe,要等待一段时间以后再编译才可以,我这边是要等待10多秒,不是ctrl+F2的原因,直接点窗口关闭按钮同样的问题。。。。。。
但是却能够直接删除exe,删除后再编译可以。
大家遇到过吗?如何解决?
lantianbaiyuan1 2017-05-26
  • 打赏
  • 举报
回复
没精力专门查问题,今天又遇到了感觉到有规律就尝试复现以下,以后再复现了其它的再贴。
点右键报错的问题出现在使用项目组管理器时,一个project运行时切换到另一个project就会发生错误。

复现步骤:
1、创建两个项目project1 和project2
2、都加入到项目组projectgroup1里
3、选中任意一个项目,比如project1,F9运行起来
4、不要关闭步骤3运行的project1程序,切换到project2
5、打开project2的任意一个单元点,选中代码,点右键,报错复现!

-------后面的这个说明大家不用管,进一步情况我没详细观察总结,看前面5个步骤即可。
有时选不选中代码都会出现,出现后有时弹出cpu窗口,关闭cpu窗口,再点,问题不出现了,再在projectgroup1选中project2又出现错误。


lantianbaiyuan1 2017-05-26
  • 打赏
  • 举报
回复
引用 18 楼 DelphiGuy 的回复:
“....至于编辑器里选一段文字,鼠标右键就出错的事情,只要长脑子的人都知道这是完全不可能的,....
是吗?没法说你.... 三人行必有我师,教育我,谢谢你啊
  • 打赏
  • 举报
回复
什么事实?事实是你除了瞎喷之外没有说出任何有价值的东西,所谓“发现utf8string和ansistring赋值编译器不自动转化?需要强制转化”的BUG是不存在的,“32位环境的中文路径和FDA的”BUG没有任何例证,至于编辑器里选一段文字,鼠标右键就出错的事情,只要长脑子的人都知道这是完全不可能的,唯一的可能性就是你装了一些乱七八糟的IDE插件或者某些使用HOOK的软件造成的,你清洁安装系统和Delphi看看还有没有? 另外,就你这脑力和人品,还讨论?你搞没搞清楚我是在教育你。
lantianbaiyuan1 2017-04-22
  • 打赏
  • 举报
回复
你嘴真是欠到家了...。 看截图事实说话,其它都是嘴把式。 不需要你攻击Form起名之类的,想讨论讨论,不想讨论不送....
lantianbaiyuan1 2017-04-20
  • 打赏
  • 举报
回复
遇到这个问题了,顺带截个图:
两步复现:
1、双击选中字符串
2、点鼠标右键 ,出错

不是每次都报错,但是一定有问题。
lantianbaiyuan1 2017-04-20
  • 打赏
  • 举报
回复
DelphiGuy 不能解决不要骂人,你这嘴不怕人笑话你。
  • 打赏
  • 举报
回复
引用 14 楼 lantianbaiyuan1 的回复:
遇到这个问题了,顺带截个图: 两步复现: 1、双击选中字符串 2、点鼠标右键 ,出错 [/img] 不是每次都报错,但是一定有问题。
一定是你的傻鸟有问题,从D1用到XE5,从来没有说编辑器里选一段文字,鼠标右键就出错的事情,你问问其他人有没有?而且Aution是什么鬼?自造的?识字么?
  • 打赏
  • 举报
回复
引用 13 楼 lantianbaiyuan1 的回复:
DelphiGuy 不能解决不要骂人,你这嘴不怕人笑话你。
解决个马,你真正需要解决的是自己的脑力问题和人品问题。比如,我前面已经说得很明确:
引用 11 楼 DelphiGuy 的回复:
[quote=引用 8 楼 lantianbaiyuan1 的回复:] 你这就算测试了? 就这样下辈子也发现不了问题。。 我提到的其它问题呢? 32位环境的中文路径和FDA的, 你测试了吗? 这么高的号,解决解决,看你多大本事
那你说什么算测试?测出你满意的结果才算?显然你所谓的“外发现utf8string和ansistring赋值编译器不自动转化?需要强制转化”BUG是不存在的,你还要怎么测试。至于所谓“32位环境的中文路径和FDA的”那是你的问题,我没有兴趣帮你解决BUGs,而且你语焉不详的,有具体例证吗,脑残也不需要这样炫 [/quote] 你居然还厚着脸皮出来喷,仿佛自己摆个POSE就自然胜利了一样。
hongss 2017-04-11
  • 打赏
  • 举报
回复
同时用D7和XE2的飘过。。。
  • 打赏
  • 举报
回复
引用 8 楼 lantianbaiyuan1 的回复:
你这就算测试了? 就这样下辈子也发现不了问题。。 我提到的其它问题呢? 32位环境的中文路径和FDA的, 你测试了吗? 这么高的号,解决解决,看你多大本事
那你说什么算测试?测出你满意的结果才算?显然你所谓的“外发现utf8string和ansistring赋值编译器不自动转化?需要强制转化”BUG是不存在的,你还要怎么测试。至于所谓“32位环境的中文路径和FDA的”那是你的问题,我没有兴趣帮你解决BUGs,而且你语焉不详的,有具体例证吗,脑残也不需要这样炫。
lantianbaiyuan1 2017-04-08
  • 打赏
  • 举报
回复
顺便说几个xe的调试器问题,如果有遇到调试死机或者断点无效的情况大家试试以下的方法: 1、不要在鼠标没在IDE里时按F8,程序和ide来回切换时很容易直接按F8,非常容易出问题。 2、是不是用的网上流传的那个盗版?把那两个exe从win10自带的防火墙里去掉试试!这个问题前后经历一年多,到现在也不十分明确到底是什么主要原因造成的,现在是win10正版和comodo防火墙 ,现在很少死机了。 3、调试时程序好好的但是断点突然失效?别着急退,正常情况F9运行 ctrl+F2结束调试不是嘛,断点失效时按红色reset按钮一次,回退一步,如果程序没有退出且绿色按钮和红色按钮都显示时断点就能生效了,如果不行再reset一次回退一步。 4、来回折腾几次断点又不能加了?上面方法也不起作用了,保存环境,关闭后重启xe,断点就又可以加了。毛病很多的。。。。。 以下两不是调试器的问题,是设计器的问题: 5、有没有遇到过什么都没做写代码时突然跳出一个错误框,提示类似内存错误,确定后马上弹出一个像花屏似得右键菜单的??别管它,确定关闭后还能正常运行。下次再出现我截个图。 6、有没有使用flowpanel gridpanel relativepanel几个新控件的?你另开了一个验证程序,逐步设计好各种布局、线条、相对位置。。。等等后满意了,然后把你的成果界面粘贴到项目中的窗体,等待你的将是关不掉的内存错误框无穷尽地往出蹦。。。。提示让你发送错误信息给厂家。只能后台强制结束,再打开项目依然出错,发现那个被粘贴的单元文件直接就坏掉了。。。。怎么办??设计好的界面不能直接使用并且把已有的窗体文件还给弄坏了。。。你还没来得及提交vss。。。手动重调dfm文件吧,复杂的可够你受的。最后还是笨拙地重新把窗体做一般。。。讨厌吗?????这玩意设计的。。。。
lantianbaiyuan1 2017-04-08
  • 打赏
  • 举报
回复
你这就算测试了? 就这样下辈子也发现不了问题。。 我提到的其它问题呢? 32位环境的中文路径和FDA的, 你测试了吗? 这么高的号,解决解决,看你多大本事
lyhoo163 2017-04-08
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
引用 6 楼 lantianbaiyuan1 的回复:
那个 DelphiGuy ,试试bug再说,你的嘴应该比脑子慢一步
你的嘴都跑到天顶星了,脑子还停留在单孔目。我很好奇你的所谓BUGs是发生在另一个宇宙,还是存在于你的想象中,由你的脑力BUGs导致的? 随便测试一下你所谓的第一个BUG: 另外发现utf8string和ansistring赋值编译器不自动转化?需要强制转化,utf8string和string之间赋值编译器会自动转化。看来以前遇到的类似问题也是如此!! “还不如直接查大富翁”?还不如睁大你的眼睛看看UTF8String是怎么声明的:UTF8String = type AnsiString(65001); // system.pas 很明显UTF8String就是codepage指定为65001(UTF-8编码)的AnsiString,怎么可能“utf8string和ansistring赋值编译器不自动转化?需要强制转化”?那codepage岂不是白指定了? 随便测试一下:

var
  s1: utf8string;
  s2: ansistring;
  s: string;
begin
  s1 := 'abc 这是一个测试 xyz';
  writeln(s1, ' -> length = ', Length(s1));
  s2 := s1;
  writeln(s2, ' -> length = ', Length(s2));
  s := s2;
  writeln(s, ' -> length = ', Length(s));
end;
从D2009以来都是如此: abc 这是一个测试 xyz -> length = 26 abc 这是一个测试 xyz -> length = 20 abc 这是一个测试 xyz -> length = 14
菜鸟求指点 2017-01-10
  • 打赏
  • 举报
回复
一般程序都不用中文目录,容易乱码读取失败。
lantianbaiyuan1 2017-01-10
  • 打赏
  • 举报
回复
那个 DelphiGuy ,试试bug再说,你的嘴应该比脑子慢一步
lyhoo163 2017-01-10
  • 打赏
  • 举报
回复
D7是精髓,XE是光辉。
  • 打赏
  • 举报
回复
引用 3 楼 juno_393 的回复:
感觉好可怕。还是D7好
他是D5用着顺手...
juno_393 2017-01-10
  • 打赏
  • 举报
回复
感觉好可怕。还是D7好
加载更多回复(1)

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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