此代码是使用 Indy 9 在 Borland C++Builder 6 中编写的:
void __fastcall TfrmMain::ServerConnect(TIdPeerThread *AThread)
{
BKUK_PACKET Pkt;
----------(Omission)---------------------------------------
//AThread->Connection->WriteBuffer(&Pkt,sizeof(BKUK_PACKET),1);
----------(Omission)---------------------------------------
}
WriteBuffer()
在 Indy 10 中找不到命名的函数。有等效的函数吗?
BKUK_PACKET
是一个大约1200字节的结构。
typedef struct _BKUK_PACKET_
{
BYTE head[4];
WORD PayLoad;
WORD Length;
BYTE Data[1200];
WORD Ver;
BYTE tail[2];
}BKUK_PACKET;
TIdIOHandler.Write(TIdBytes)
我在查看 Indy 10 的说明手册时找到了该方法。
我提到了我之前告诉你的代码:
Indy 10 中是否有相当于 Indy 9 的 ReadBuffer() 的功能?
template<typename T>
void __fastcall PopulateWriteBuffer(T& obj,TIdIOHandler* ioh) {
System::Byte* p = (System::Byte*) &obj;
for(unsigned count=0; count<sizeof(T); ++count, ++p)
ioh->Write(*p);
----------(Omission)---------------------------------------
Populate02(&Pkt,AContext->Connection->IOHandler);
}
但是当我尝试按上述方式编程时,出现错误:
[bcc32c 错误] Main.cpp(608):没有匹配函数调用“Populate02”
Main.cpp(478):候选函数 [with T = _BKUK_PACKET_ *] 不可行:第一个参数没有从 '_PACKET *'(又名 '_BKUK_PACKET_ *')到 '_BKUK_PACKET_ *&' 的已知转换
请告诉我如何修复此代码。