在使用PChar中出现的莫名奇妙的问题,请高手指点 使用问题。PChar不管内存分配。改用String吧 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 PChar不是“生存期自管理类型”,所以管理起来比较麻烦,你可以使用string类型,当然了,如果你的字符串长度小于255的话,它就是一个shortstring类型,它不是一个“生存期自管理类型”,最好是声明为ansistring类型的,这样就不会有问题 unit Unit1;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButton; ListBox1: TListBox; Edit1: TEdit; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; function GetInfo(var p1,p2,p3,p4,p5,p6,p7,p8,p9: String):integer;stdcall;var Form1: TForm1; st:integer; dest,source:array[0..255]of char; //OK!implementation{$R *.DFM}function GetInfo(var p1,p2,p3,p4,p5,p6,p7,p8,p9: String):integer;stdcall;var return,i: integer; str: string; p:String;begin Result := 0; p1 := Copy(source,2,10); p2 := Copy(source,12,8); p3 := Copy(source,20,18); p4 := Copy(source,38,20); p5 := Copy(source,58,1); p6 := Copy(source,59,1); p7 := Copy(source,60,8); p8 := Copy(source,68,6); p9 := Copy(source,74,1);end;procedure TForm1.Button1Click(Sender: TObject);var p1,p2,p3,p4,p5,p6,p7,p8,p9: String;begin listbox1.Clear; source := '200000000018888888814232619761225541XLIUJINWEI 101976122510000112002071120120711'; GetInfo(p1,p2,p3,p4,p5,p6,p7,p8,p9); listbox1.items.add('p1:'+p1); listbox1.items.add('p2:'+p2); listbox1.items.add('p3:'+p3); listbox1.items.add('p4:'+p4); listbox1.items.add('p5:'+p5); listbox1.items.add('p6:'+p6); listbox1.items.add('p7:'+p7); listbox1.items.add('p8:'+p8); listbox1.items.add('p9:'+p9);end;end. 使用PChar获取返回数据前,首先应申请空间。unit Unit1;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButton; ListBox1: TListBox; Edit1: TEdit; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; function GetInfo(p1,p2,p3,p4,p5,p6,p7,p8,p9: PChar):integer;stdcall;var Form1: TForm1; st:integer; dest,source:array[0..255]of char; //OK!implementation{$R *.DFM}function GetInfo(p1,p2,p3,p4,p5,p6,p7,p8,p9: PChar):integer;stdcall;var return,i: integer; str: string; p:PChar;begin Result := 0; StrPCopy(P1, copy(source,2,10)); StrPCopy(p2, copy(source,12,8)); StrPCopy(p3, copy(source,20,18)); StrPCopy(p4, copy(source,38,20)); StrPCopy(p5, copy(source,58,1)); StrPCopy(p6, copy(source,59,1)); StrPCopy(p7, copy(source,60,8)); StrPCopy(p8, copy(source,68,6)); StrPCopy(p9, copy(source,74,1));end;procedure TForm1.Button1Click(Sender: TObject);var p1,p2,p3,p4,p5,p6,p7,p8,p9: array[0..255]of char;begin listbox1.Clear; source := '200000000018888888814232619761225541XLIUJINWEI 101976122510000112002071120120711'; GetInfo( PChar(@p1), PChar(@p2), PChar(@p3), PChar(@p4), PChar(@p5), PChar(@p6), PChar(@p7), PChar(@p8), PChar(@p9) ); listbox1.items.add('p1:'+p1); listbox1.items.add('p2:'+p2); listbox1.items.add('p3:'+p3); listbox1.items.add('p4:'+p4); listbox1.items.add('p5:'+p5); listbox1.items.add('p6:'+p6); listbox1.items.add('p7:'+p7); listbox1.items.add('p8:'+p8); listbox1.items.add('p9:'+p9);end;end. 建议用Stirng;pchar只是指针,需要自己管理内存空间 Borlandor(五角▲大民),你的办法好象编译有错误。大家好,对于使用其他的类型,完全没有问题,我就是想把PCHAR搞明白!!! 多谢各位,此问题我已经解决。unit Unit1;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;type TForm1 = class(TForm) Button1: TButton; ListBox1: TListBox; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Button2: TButton; Memo1: TMemo; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; function GetInfo(var p1,p2,p3,p4,p5,p6,p7,p8,p9: PChar):integer;stdcall;var Form1: TForm1; st:integer; dest,source:array[0..255]of char; //OK!implementation{$R *.DFM}function GetInfo(var p1,p2,p3,p4,p5,p6,p7,p8,p9: PChar):integer;stdcall;var return,i: integer; str: string; p:PChar;begin Result := 0; StrPCopy(P1, copy(source,2,10)); StrPCopy(p2, copy(source,12,8)); StrPCopy(p3, copy(source,20,18)); StrPCopy(p4, copy(source,38,20)); StrPCopy(p5, copy(source,58,1)); StrPCopy(p6, copy(source,59,1)); StrPCopy(p7, copy(source,60,8)); StrPCopy(p8, copy(source,68,6)); StrPCopy(p9, copy(source,74,1));end;procedure TForm1.Button1Click(Sender: TObject);var p1,p2,p3,p4,p5,p6,p7,p8,p9:pchar; //array[0..155] of char;begin listbox1.Clear; source := '200000000018888888814232619761225541XLIUJINWEI 101976122510000112002071120120711'; getmem(p1,30); getmem(p2,30); getmem(p3,30); getmem(p4,30); getmem(p5,30); getmem(p6,30); getmem(p7,30); getmem(p8,30); getmem(p9,30); GetInfo(p1,p2,p3,p4,p5,p6,p7,p8,p9); listbox1.items.add('p1:'+p1); listbox1.items.add('p2:'+p2); listbox1.items.add('p3:'+p3); listbox1.items.add('p4:'+p4); listbox1.items.add('p5:'+p5); listbox1.items.add('p6:'+p6); listbox1.items.add('p7:'+p7); listbox1.items.add('p8:'+p8); listbox1.items.add('p9:'+p9);end;end. 电子秤读数问题 那个技术网站最好啊,我是菜鸟。 数据库数据的随机抽取问题 怎样让panel DBGrid 等元件 为透明 求一函数(取得超过3G单个文件的大小)??? 一个指会付值的问题? 人间惨剧:看了之后你就知道MM的胃口多大 向指定的进程发送数据.(jadeluo(秀峰))兄一定进来看看啊 Delphi 的动态数组问题? sql语句高分求救 怎样判断一个文本框中输入的全都是汉字? 下面一段簡單的代碼,誰能不能幫我改改 ?? 3層的是不是只能用Filter過濾條件,不能用select..過濾條件?
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
ListBox1: TListBox;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; function GetInfo(var p1,p2,p3,p4,p5,p6,p7,p8,p9: String):integer;stdcall;var
Form1: TForm1;
st:integer;
dest,source:array[0..255]of char; //OK!implementation{$R *.DFM}function GetInfo(var p1,p2,p3,p4,p5,p6,p7,p8,p9: String):integer;stdcall;
var
return,i: integer;
str: string;
p:String;
begin
Result := 0;
p1 := Copy(source,2,10);
p2 := Copy(source,12,8);
p3 := Copy(source,20,18);
p4 := Copy(source,38,20);
p5 := Copy(source,58,1);
p6 := Copy(source,59,1);
p7 := Copy(source,60,8);
p8 := Copy(source,68,6);
p9 := Copy(source,74,1);
end;procedure TForm1.Button1Click(Sender: TObject);
var
p1,p2,p3,p4,p5,p6,p7,p8,p9: String;
begin
listbox1.Clear;
source := '200000000018888888814232619761225541XLIUJINWEI 101976122510000112002071120120711'; GetInfo(p1,p2,p3,p4,p5,p6,p7,p8,p9); listbox1.items.add('p1:'+p1);
listbox1.items.add('p2:'+p2);
listbox1.items.add('p3:'+p3);
listbox1.items.add('p4:'+p4);
listbox1.items.add('p5:'+p5);
listbox1.items.add('p6:'+p6);
listbox1.items.add('p7:'+p7);
listbox1.items.add('p8:'+p8);
listbox1.items.add('p9:'+p9);
end;end.
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
ListBox1: TListBox;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; function GetInfo(p1,p2,p3,p4,p5,p6,p7,p8,p9: PChar):integer;stdcall;var
Form1: TForm1;
st:integer;
dest,source:array[0..255]of char; //OK!implementation{$R *.DFM}function GetInfo(p1,p2,p3,p4,p5,p6,p7,p8,p9: PChar):integer;stdcall;
var
return,i: integer;
str: string;
p:PChar;
begin
Result := 0;
StrPCopy(P1, copy(source,2,10));
StrPCopy(p2, copy(source,12,8));
StrPCopy(p3, copy(source,20,18));
StrPCopy(p4, copy(source,38,20));
StrPCopy(p5, copy(source,58,1));
StrPCopy(p6, copy(source,59,1));
StrPCopy(p7, copy(source,60,8));
StrPCopy(p8, copy(source,68,6));
StrPCopy(p9, copy(source,74,1));
end;procedure TForm1.Button1Click(Sender: TObject);
var
p1,p2,p3,p4,p5,p6,p7,p8,p9: array[0..255]of char;
begin
listbox1.Clear;
source := '200000000018888888814232619761225541XLIUJINWEI 101976122510000112002071120120711'; GetInfo(
PChar(@p1),
PChar(@p2),
PChar(@p3),
PChar(@p4),
PChar(@p5),
PChar(@p6),
PChar(@p7),
PChar(@p8),
PChar(@p9)
); listbox1.items.add('p1:'+p1);
listbox1.items.add('p2:'+p2);
listbox1.items.add('p3:'+p3);
listbox1.items.add('p4:'+p4);
listbox1.items.add('p5:'+p5);
listbox1.items.add('p6:'+p6);
listbox1.items.add('p7:'+p7);
listbox1.items.add('p8:'+p8);
listbox1.items.add('p9:'+p9);
end;end.
大家好,对于使用其他的类型,完全没有问题,我就是想把PCHAR搞明白!!!
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls;type
TForm1 = class(TForm)
Button1: TButton;
ListBox1: TListBox;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Button2: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; function GetInfo(var p1,p2,p3,p4,p5,p6,p7,p8,p9: PChar):integer;stdcall;var
Form1: TForm1;
st:integer;
dest,source:array[0..255]of char; //OK!implementation{$R *.DFM}function GetInfo(var p1,p2,p3,p4,p5,p6,p7,p8,p9: PChar):integer;stdcall;
var
return,i: integer;
str: string;
p:PChar;
begin
Result := 0;
StrPCopy(P1, copy(source,2,10));
StrPCopy(p2, copy(source,12,8));
StrPCopy(p3, copy(source,20,18));
StrPCopy(p4, copy(source,38,20));
StrPCopy(p5, copy(source,58,1));
StrPCopy(p6, copy(source,59,1));
StrPCopy(p7, copy(source,60,8));
StrPCopy(p8, copy(source,68,6));
StrPCopy(p9, copy(source,74,1));
end;procedure TForm1.Button1Click(Sender: TObject);
var
p1,p2,p3,p4,p5,p6,p7,p8,p9:pchar; //array[0..155] of char;
begin
listbox1.Clear;
source := '200000000018888888814232619761225541XLIUJINWEI 101976122510000112002071120120711';
getmem(p1,30);
getmem(p2,30);
getmem(p3,30);
getmem(p4,30);
getmem(p5,30);
getmem(p6,30);
getmem(p7,30);
getmem(p8,30);
getmem(p9,30);
GetInfo(p1,p2,p3,p4,p5,p6,p7,p8,p9); listbox1.items.add('p1:'+p1);
listbox1.items.add('p2:'+p2);
listbox1.items.add('p3:'+p3);
listbox1.items.add('p4:'+p4);
listbox1.items.add('p5:'+p5);
listbox1.items.add('p6:'+p6);
listbox1.items.add('p7:'+p7);
listbox1.items.add('p8:'+p8);
listbox1.items.add('p9:'+p9);
end;end.