delphi 换版本乱码 问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi 换版本乱码 问题相关的知识,希望对你有一定的参考价值。

我在网上找了一个代码 怎么在delphi 7下编译没问题 在delphi2010下编译乱码啊?
function CmdShell(Ser:String):String;
var
DReadPipe,DWritePipe:THandle;
STAR:STARTUPINFO;
SEC_A:SECURITY_ATTRIBUTES;
PROC_I:PROCESS_INFORMATION;
MYReadBuffer:DWORD;
ph:PChar;
MYName:PChar;
begin
//memo1.Lines.Clear;
MYName:=allocmem(255);
ph:=AllocMem(5000);
SEC_A.nLength :=sizeof(SECURITY_ATTRIBUTES);
SEC_A.lpSecurityDescriptor :=nil;
SEC_A.bInheritHandle :=True;
if CreatePipe(DReadPipe,DWritePipe,@SEC_A,0)=false then
begin //建立匿名管道
//ShowMessage('Can not create pipe!');
Result:='Can not create pipe!';
exit;
end;
fillchar(STAR,sizeof(STARTUPINFO),0);
STAR.cb :=sizeof(STARTUPINFO);
STAR.dwFlags :=(STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW);
STAR.wShowWindow :=SW_HIDE;
STAR.hStdOutput :=DWritePipe;
StrPCopy(MYName,Ser);
if CreateProcess( nil, MYName, nil, nil, true, 0, nil, nil, STAR, PROC_I) = False then
begin //创建一个进程
// ShowMessage('can not create process');
Result:='can not create process';
FreeMem(ph);
FreeMem(MYName);
Exit;
end;
while(true) do
begin
//预显示管道队列的数据
if not PeekNamedPipe(DReadPipe,ph,1,@MYReadBuffer,nil,nil) then break;
if MYReadBuffer<>0 then
begin
// 读取文件
if ReadFile(DReadPipe,ph^,4096,MYReadBuffer,nil)=false then break;
// Memo1.Lines.Add(ph);
//Writeln(ph);
Result:=ph;
end
//监测是否为等待对象
else if(WaitForSingleObject(PROC_I.hProcess ,0)=WAIT_OBJECT_0) then break;
Sleep(100);
end;
CloseHandle(DReadPipe);
CloseHandle(PROC_I.hThread);
CloseHandle(PROC_I.hProcess);
CloseHandle(DWritePipe);
FreeMem(ph);
FreeMem(MYName);
Result:=Result;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(CmdShell('cmd')) ;
end;

参考技术A 将所有的string类型改为AnsiString,将pchar 改为PAnsiChar试试。本回答被提问者采纳

delphi控制台程序输出中文乱码,如何解决?

我在程序中直接用writeln()输出,如writeln('你好'),但是控制台显示的时候是乱码,怎么解决

这与Delphi无关。

按如下步骤操作,应该可以解决:

 

一、在“开始”->“运行”里输入“CMD“,回车或者点击“确定”,打开命令行窗口。应该显示:

 

 

 

Microsoft Windows [版本 6.1.7600]

版权所有 (c) 2009 Microsoft Corporation。保留所有权利。

C:\\Users\\Administrator>

 

这表明你的命令行窗口可以显示中文,否则,应该显示如下的信息:

Microsoft Windows [Version 6.1.7600]

Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\\Users\\Administrator>

 

这表明你的命令行窗口不能显示中文。你应该继续如下操作:

 

二、鼠标单击命令行窗口的左上角,打开系统菜单,选择“选项”,在“默认代码页”中选择“936 (ANSI/OEM - 简体中文GBK)”,点“确定”。

 

关闭命令行窗口。

重新打开命令行窗口,应该可以显示中文了。

 

三、重新运行你的Delphi控制台程序,是不是好了?

 

另外,我的是Windows7,根据你的Windows版本不同,命令行窗口显示的信息可能会略有差异。

 

 

追问

按照你说的设置了,不过程序还是老样子,中文还是乱码~~~不过还是非常感谢你,回答的很详细

追答

把你的命令行窗口抓屏过来,我看看

追问

后面的中文是直接用writeln输出的

追答

你用的不是Windows的命令行窗口cmd.exe,而是用的dbmgr.exe。
解决办法:
一、设置你的dbmgr.exe,用来显示中文(如果可以设置的话)。
二、如果不可以,你就把Delphi程序生成的exe文件,在Windows的命令行窗口cmd.exe下运行。

参考技术A 你到www.csdn.net 论坛的DELPHI栏目问,人气足,这属小问题

以上是关于delphi 换版本乱码 问题的主要内容,如果未能解决你的问题,请参考以下文章

关于IDA字符串问题(显示乱码,250分答谢)

delphi控制台程序输出中文乱码,如何解决?

delphi中SQL文取出的汉字为乱码

delphi乱码问题

delphi 2010 编译乱码问题

delphi请求http接口中文乱码问题