unit Unit14;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
Taaa=record
A:array of Pchar;
B:pchar;
end;
Paaa=^Taaa;
type
TForm14 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
procedure getvalue(var ab:integer);
{ Private declarations }
public
{ Public declarations }
end;var
Form14: TForm14;implementation{$R *.dfm}
procedure TForm14.Button1Click(Sender: TObject);
var i:integer;
begin
getvalue(i);
ShowMessage(Paaa(i).b);
ShowMessage(Inttostr(High(Paaa(i).A)));end;procedure TForm14.getvalue(var ab:integer);
var aa:Taaa;
i:integer;
begin
aa.B :='3sds上';
SetLength(aa.A,3);
for I := 0 to 2 do
AA.A[i]:=Pchar(Inttostr(i));
ab:=integer(@aa);
end;
end.
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
Taaa=record
A:array of Pchar;
B:pchar;
end;
Paaa=^Taaa;
type
TForm14 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
procedure getvalue(var ab:integer);
{ Private declarations }
public
{ Public declarations }
end;var
Form14: TForm14;implementation{$R *.dfm}
procedure TForm14.Button1Click(Sender: TObject);
var i:integer;
begin
getvalue(i);
ShowMessage(Paaa(i).b);
ShowMessage(Inttostr(High(Paaa(i).A)));end;procedure TForm14.getvalue(var ab:integer);
var aa:Taaa;
i:integer;
begin
aa.B :='3sds上';
SetLength(aa.A,3);
for I := 0 to 2 do
AA.A[i]:=Pchar(Inttostr(i));
ab:=integer(@aa);
end;
end.
A:array of Pchar;
B:pchar;
end;
Paaa=^Taaa;
A是一个指针数组,如果写成A:array of char;应该就不会有问题了
请问怎么标记,我这个结构体里有N多个动态数组的
結構裏面應該就是 PChar 或 Array of AnsiChar;
要不你直接貼出你C#調用的代碼吧,應該是對傳遞的思路不對。
Taaa=record
A:array of integer;
B:pchar;
end;
Paaa=^Taaa;
即使是array of integer
下成的函数也得不到A的所有值,delphi都没通过,能否帮忙完成这个过程
procedure getvalue(var ab:integer);
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls; type
Taaa=record
A:array of Pchar;
B:pchar;
end;
Paaa=^Taaa;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
procedure getvalue(var ab:Taaa); end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button2Click(Sender: TObject);
var i:Taaa;
begin
getvalue(i);
ShowMessage(i.b);
ShowMessage(Inttostr(High(taaa(i).A)));end;procedure TForm1.getvalue(var ab:Taaa);
var aa:Taaa;
i:integer;
begin
//getmem(aa,sizeof(AA));
aa.B :='3sds上';
SetLength(aa.A,3);
for I := 0 to 2 do
AA.A[i]:=Pchar(Inttostr(i));
ab:= AA;
end;end.
Taaa=record
A:array of Pchar;
ASize: Integer;
B:pchar;
end;
Paaa=^Taaa;
PElementList=^TElementList;
TElementList=record
Path:string;
WebPath:String;
Name:String;
Head:TIntegerDynArray;
T:TDoubleDynArray;
MaxT,MinT:Double;
Td:TDoubleDynArray;
MaxTD,MinTD:Double;
AVGT:Double;
AVGTD:Double;
Sp:TDoubleDynArray;
Dir:TIntegerDynArray;
P:TDoubleDynArray;
MaxP,MinP,MaxRain:Double;
MaxSP:TDoubleDynArray;
MaxDir:TIntegerDynArray;
T2Max:TDoubleDynArray;
T2Min:TDoubleDynArray;
RH:TIntegerDynArray;
R:TDoubleDynArray;
R624:TDoubleDynArray;
CLD,CLDL,CLDM,CLDH:TIntegerDynArray;
VIS:TDoubleDynArray;
end;
Type
PInterMode=^TInterMode;
TInterMode=record
JCHead:TIntegerDynArray;
JCT,JCTD,JCP,JCSP,JCRH,JCT2MAX,JCT2MIN:TDoubleDynArray;
JCAVGT,JCAVGTD:TDoubleDynArray;
JCR,JCR1,JCR2,JCR3:TDoubleDynArray;
JCDIR,JCRP,JCRP1,JCRP2,JCRP3,JCRF,JCRF1,JCRF2,JCRF3:TIntegerDynArray;
JCCLD,JCCLDL,JCCLDM,JCCLDH:TIntegerDynArray;
AllMaxT,AllMaxP,AllMinT,AllMinP:Integer;
PathDateTime:String;
JCMStateNum:String;
JCMWeiDu,JCMJinDu:String;
JCStation:String;
aExists:Boolean;
JCIndex:Integer;
end;
这两个结构体数据是我要用到的,现在我主程序与数据获取分离,写了User_Check_Data.dll这个dll处理数据,所有的数据都转化成上面的结构体,用户二次开发也用这个数据,我这个dll函数该怎么写
var aa:Taaa;
i:integer;
begin
aa.B :='3sds上';
SetLength(aa.A,3);
for I := 0 to 2 do
AA.A[i]:=Pchar(Inttostr(i));
ab:=integer(@aa);
end;
有没有发现,你的A[i]在使用之前,没有GetMem
已经用setlength初始了,呵呵~~
Form1: TForm1;
aa:Taaa;
i:integer;这样也可以吖,呵呵~~