请问在异步模式下WSASend的有关问题

请教在异步模式下WSASend的问题
问题是这样的:我的服务器要向客户端发送一个自定义的结构体,例如:
struct   myStruct
{
    int   ID;
    char   name[30];
};
在异步模式下(MFC),在服务器端我调用WSASend(...)来发送这个结构体:
          myStruct   stru;
          stru.ID   =   10;
          stru.name   =   "XXX ";
         
          WSABUF   data;
          int   len   =   sizeof(myStruct);          
          data.len   =   len;
          data.buf   =(char*)&stru;
最后调用   WSASend发送。

在客户端,使用WSARecv接收。可是在客户端接收的数据是错误的,还出现了内存访问错误的情况。而在WIN32控制台环境下,我使用同步方式编写的程序就能发送成功。请问这是什么原因啊?怎么解决这个问题?请各位大侠不吝赐教。谢谢!


------解决方案--------------------
myStruct stru;
是个局部变量,在真正发送数据时stru已经析构,data.buf(&stru), 已经是个无效的地址了。
------解决方案--------------------
没看见你的重叠i/o,异步发送是用重叠i/o来实现的。

myStruct stru;
是个局部变量,在真正发送数据时stru已经析构,data.buf(&stru), 已经是个无效的地址了。

type
PIOBuffer = ^TIOBuffer;
TIOBuffer = packed record
ol: TWSAOverlapped;
sClient: TSocket;
nOperation: Byte;
Buf: PByte;
nLen: Integer;
nSeq: Integer;
Next: PIOBuffer;
end;

function TTcpSock.PostSend(pContext: PIOContext; pBuffer: PIOBuffer): BOOL;
var
dwBytes,dwFlags: DWORD;
buf: WSABUF;
begin
Result := True;
dwFlags := 0;
pBuffer^.nOperation := OP_WRITE;
buf.len := pBuffer^.nLen;
buf.buf := PChar(pBuffer^.Buf);
if((WSASend(pContext^.sConnect,@buf,1,dwBytes,dwFlags,@pBuffer^.ol,nil) <> NO_ERROR)) then
begin
if(WSAGetLastError <> wsa_io_pending) then
begin
OutpShow(True,PChar( '投递WSASend失败! '));
ReleaseBuffer(pBuffer);
Result := False;
Exit;
end;
end;
Inc(pContext^.nOutSend);
end;