谁帮我将VC转为delphi?谢 ( 积分: 100 )

  • 主题发起人 主题发起人 rzqcjwrz
  • 开始时间 开始时间
R

rzqcjwrz

Unregistered / Unconfirmed
GUEST, unregistred user!
void CHKVisionDlg::OnMyCommand(WPARAM wParam, LPARAM lParam)
{
if ((BYTE)wParam == GETSTRING)
{
char ts[1000];
char ips[30];
WORD tlen;
memset(ts,0,1000);
MP4_ServerReadLastMessage(ips,ts,&tlen);
sprintf(&(ts[tlen]),"/r/n");
AfxMessageBox(ts);
// TRACE(ts);
}
}
 
这种东西转换不了的,大致是这样的,响应一个自定义的消息(看名字好像是MyCommand消息,至于具体定义的值就不知道了),然后分配内存(1000字节大小)并全部填充0,通过一个名为:MP4_ServerReadLastMessage的函数读取信息到分配的内存中,最后格式化并通过呼叫MessageBox函数显示出来。你自己可以结合程序的上下文环境改过来,单单就这段代码是不好转的,转了你拿去也没有什么作用^_^
 
看来消息的截取,对我太难了,怎样实现?
 
接受自定义消息(通过判断wParam == GETSTRING来认证),MP4_ServerReadLastMessage是一个功能函数,没有上下文不好说啊.
 
MP4_ServerReadLastMessage:读取客户端消息,原型是:
Void _stdcall MP4_ServerReadLastMessage(char *m_sIP,char *m_sCommand,WORD *m_wLen),m_sIP:消息来自哪个IP地址,m_sCommand:消息缓冲区指针,m_wLen:消息实际长度
 
m_length := 500000;
status := ReadStreamData(CameraGroup[Channel].CardHandle, @StreamBuf,
@m_length,
@frameType);
//m_length参数输入缓冲的大小,输出一帧数据的长度
if status < 0 then

exit;
if frameType > 0 then

begin

if frameType = PktSysHeader then
//系统头
begin

copymemory(@TemBuf[Channel], @StreamBuf, m_length);
//把文件头信息保存起来
FileHeaderLen[Channel] := m_length;
writeln(f,inttostr(Channel));
writeln(f,inttostr(FileHeaderLen[Channel]));
end;

if frameType = PktMotionDetection then
//动态检测包
begin

MotionAnalyzer(CameraGroup[Channel].CardHandle, PChar(@StreamBuf), 1,
@iResult);
begin


if iResult > 0 then
//检测区域一动iResult结果就>0了
begin

if gAlarmFileHandle[Channel] = 0 then

CameraGroup[Channel].AlarmRecord.ChangeFile := True;
MotionSave(Channel);
exit;
end;

end;

end;

if frameType = PktSFrames then
//单帧捕获时也在这里处理,连续文件处理
begin

end;

if frameType = PktOrigImage then

begin

end;

end;

if m_Length = 0 then

begin

Exit;
end;
 
怎么写,消息?请高手指点.
 
procedure drag(var M: twmnchittest);
message wm_nchittest;
 
cxz9:里面怎么写
 
procedure CHKVisionDlg.OnMyCommand(wParam, lParam:dword);
var
ts:array [0..1000-1] of char;
ips:array [0..30-1] of char;
tlen:word;

begin

if wParam=GETSTRING then

begin

FillChar(ts,SizeOf(ts),0);
MP4_ServerReadLastMessage(ips,ts,@tlen);
ts[tlen]=#13#10;
ShowMessage(ts);
// TRACE(ts);
end;

end;
 
ts[tlen]=#13#10;
[Error] Unit1.pas(135): Incompatible types: 'Char' and 'String'
 
porsche:你写的代码对,只有一句有问题,见上面.
procedure TDvr_Main.RecevieData(var Msg: TMessage);
var
ts:array [0..1000-1] of char;
ips:array [0..30-1] of char;
tlen:word;
begin

if Msg.wParam=byte(Getstring) then

begin

FillChar(ts,SizeOf(ts),0);
MP4_ServerReadLastMessage(ips,ts,@tlen);
ShowMessage(ts);
end;

end;
 
在delphi中如何表达这句:sprintf(&amp;(ts[tlen]),&quot;/r/n&quot;);
format(ts[tlen],tlen);对否?
 
sprintf函数的作用是从一个字符串拷贝到另一个字符串,
在Delphi中可以用 CopyMemory, Move 代替
sprintf(&amp;(ts[tlen]),&quot;/r/n&quot;);中 /r/n 的意思是 先回车再换行

可改成
procedure CHKVisionDlg.OnMyCommand(wParam, lParam:dword);
var
ts:array [0..1000-1] of char;
ips:array [0..30-1] of char;
tlen:word;
const
Enter:array [0..1] of char=#13#10;
begin

if wParam=GETSTRING then

begin

FillChar(ts,SizeOf(ts),0);
MP4_ServerReadLastMessage(ips,ts,@tlen);
// ts[tlen]:=#13#10;
CopyMemory(@ts[tlen],@Enter,SizeOf(Enter));
ShowMessage(ts);
// TRACE(ts);
end;

end;
 
procedure TDvr_Main.RecevieMessageData(var Msg: TMessage);
//接收消息
var
ts:array [0..1000-1] of char;
//消息内容
ips:array [0..30-1] of char;
//IP地址
tlen:word;
const
Enter:array [0..1] of char=#13#10;

begin

if Msg.wParam=byte(Getstring) then

begin

FillChar(ts,SizeOf(ts),0);
MP4_ServerReadLastMessage(ips,ts,@tlen);
CopyMemory(@ts[tlen],@Enter,SizeOf(Enter));
ShowMessage('消息来自'+ips+'地址'+ts);
end;

end;

需要释放:copyMemory吗?
 
procedure TDvr_Main.RecevieMessageData(var Msg: TMessage);
//接收消息
var
ts:array [0..1000-1] of char;
//消息内容
ips:array [0..30-1] of char;
//IP地址
tlen:word;
const
Enter:array [0..1] of char=#13#10;

begin

if Msg.wParam=byte(Getstring) then

begin

FillChar(ts,SizeOf(ts),0);
MP4_ServerReadLastMessage(ips,ts,@tlen);
CopyMemory(@ts[tlen],@Enter,SizeOf(Enter));
ShowMessage('消息来自'+ips+'地址'+ts);
end;

end;

需要释放:copyMemory吗?
 
完成任务,谢谢各位.
 
后退
顶部