如果你既是c专家又是delphi专家,请来拿200大洋。在线等候、调试。解决了立即给。(200分)

  • 主题发起人 DZHZH2000
  • 开始时间
D

DZHZH2000

Unregistered / Unconfirmed
GUEST, unregistred user!
原来是c代码:
typedef struct _rcv_msg
{
int SerialNO;
char AlarmDate[20];
char AlarmTime[20];

int AlarmType;
int AlarmCH;
char AlarmContent[100];

} RCV_MSG;
typedef struct _snd_msg
{
int SerialNO;
int AlarmType;
int targetType;
char targetNO[20];
int CtrlCH;
char CtrlContent[100];

} SND_MSG;
extern BOOL APIENTRY AnalyeAlarmInfo( char *msg, RCV_MSG *rcvmsg );
extern BOOL APIENTRY PackCommandInfo( SND_MSG *sndmsg, char *cmd );
翻译为delphi如下
定义记录型:
type
_rcv_msg = record
SerialNO: integer;
AlarmDate, AlarmTime: array[0..20] of char;
AlarmType, AlarmCH: integer;
AlarmContent: array[0..100] of char;
end;
type
_snd_msg = record
SerialNO: integer;
AlarmType: integer;
targetType: integer;
targetNO: array[0..20] of char;
CtrlCH: integer;
CtrlContent: array[0..100] of char;
end;
pRCV_MSG = ^_rcv_msg;
pSND_MSG = ^_snd_msg;
在程序中使用赋值:
procedure Tfrm_main.act_szpdztExecute(Sender: TObject);
var
sndmsg: pSND_MSG;
cmd: array[0..100] of Char;
i: integer;
begin
sndmsg.SerialNO := 12345;
sndmsg.AlarmType := 6;
sndmsg.targetType := 3;
sndmsg.targetNO := '13904318888';
sndmsg.CtrlCH := 1;
sndmsg.CtrlContent := '';
PackCommandInfo(sndmsg, cmd);
end;
上述代码执行出错:“存取地址00000000出错”,经过调试发现:
只要给记录中的一个成员赋值就出错。
请帮忙解决。
 
NEW函数用一下。老大!
 
指针应该先分配内存吧
 
procedure Tfrm_main.act_szpdztExecute(Sender: TObject);
var
sndmsg: _SND_MSG;
cmd: array[0..100] of Char;
i: integer;
begin
sndmsg.SerialNO := 12345;
sndmsg.AlarmType := 6;
sndmsg.targetType := 3;
sndmsg.targetNO := '13904318888';
sndmsg.CtrlCH := 1;
sndmsg.CtrlContent := '';
PackCommandInfo(@sndmsg, cmd);
end;
 
PListEntry = ^TListEntry;
TListEntry = record
Next: PListEntry;
Text: string;
Count: Integer;
end;
var
List, P: PListEntry;
begin
...
New(P);
P^.Next := List;
P^.Text := 'Hello world';
P^.Count := 1;
List := P;
...
dispose(p)
end;
 
行了不,大家都告诉你了,要new一下。
 
他犯的错误根本在于声明函数时没用var强调址传递.
 
小费已经给大家了。
 
顶部