EnumSystemCodePages为什么会这样?(100分)

  • 主题发起人 主题发起人 Delphi7.net
  • 开始时间 开始时间
D

Delphi7.net

Unregistered / Unconfirmed
GUEST, unregistred user!
<br>//以下的代码目的是想枚举出系统中所安装的所有代码页。<br>//只能显示出系统已安装的一种CodePage。<br>Function EnumSystemCodePagesProc(Str:PChar):Boolean; stdcall;<br>Function EnumSystemCodePagesProcCalcSize(Str:PChar):Boolean; stdcall;<br><br>implementation<br><br>Function EnumSystemCodePagesProcCalcSize(Str:PChar):Boolean;<br>begin<br>&nbsp; Inc(i,StrLen(Str)+1);<br>&nbsp; Result:=True;<br>end;<br><br>Function EnumSystemCodePagesProc(Str:PChar):Boolean;<br>var s:String;<br>begin<br>&nbsp; Inc(i,StrLen(Str));<br>&nbsp; StrCat(PC,Str);<br>&nbsp; Inc(i);<br>&nbsp; StrCat(PC,#13);<br>&nbsp; Result:=True;<br>end;<br><br>procedure TForm1.Button1Click(Sender: TObject);<br>var s:String;<br>begin<br>&nbsp; i:=0;<br>&nbsp; EnumSystemCodePages(@EnumSystemCodePagesProcCalcSize,CP_INSTALLED);<br>&nbsp; PC:=StrAlloc(i);<br>&nbsp; try<br>&nbsp; &nbsp; FillChar(PC^,i,0);<br>&nbsp; &nbsp; EnumSystemCodePages(@EnumSystemCodePagesProc,CP_INSTALLED);<br>//目的是想枚举出系统中所安装的所有代码页。<br>&nbsp; &nbsp; ListBox1.Items.Text:=PC;<br>//只能显示出系统已安装的一种CodePage。<br>&nbsp; finally<br>&nbsp; &nbsp; StrDispose(PC);<br>&nbsp; end;<br>end;<br>
 
根据MSDN上的说明你是做不出这个程序来了,不知是什么原因,<br>说回调函数的返回值是LongBool,在Delphi中把回调函数定义成Boolean或LongBool都不行。<br>必须定义成Integer;<br><br>请作如下修改:<br><br>Function EnumSystemCodePagesProc(Str:PChar):Integer; stdcall;<br>Function EnumSystemCodePagesProcCalcSize(Str:PChar):Integer; stdcall;<br><br>implementation<br><br>Function EnumSystemCodePagesProcCalcSize(Str:PChar):Integer;<br>begin<br>&nbsp; Inc(i,StrLen(Str)+1);<br>&nbsp; Result:=1;<br>end;<br><br>Function EnumSystemCodePagesProc(Str:PChar):Integer;<br>var s:String;<br>begin<br>&nbsp; Inc(i,StrLen(Str));<br>&nbsp; StrCat(PC,Str);<br>&nbsp; Inc(i);<br>&nbsp; StrCat(PC,#13);<br>&nbsp; Result:=1;<br>end;<br>
 
确实只有一种, 1251<br><br>function EnumCodePagesProc(ps:pchar):BOOL;stdcall;<br>begin<br>&nbsp; form1.memo1.Lines.Add (ps);<br>&nbsp; Result:=true;<br>end;<br><br>procedure TForm1.Button1Click(Sender: TObject);<br>begin<br>&nbsp; IF EnumSystemCodePages(@EnumCodePagesProc,CP_INSTALLED)<br>&nbsp; then showmessage('Ok');<br>end;<br><br>procedure TForm1.Button2Click(Sender: TObject);<br>begin<br>&nbsp; if EnumSystemCodePages(@EnumCodePagesProc,CP_SUPPORTED)<br>&nbsp; then showmessage('Ok');<br>end;<br>
 
多谢aizb!
 
后退
顶部