我正在尝试将idUDPServer
组件(Indy组件)包含在C ++ Builder XE项目中,当我尝试包含onUDPRead
事件时(由于已知事件,手动将其链接到组件) C ++ Builder XE中的错误。
我到目前为止阅读的所有文章都通过手动将事件功能分配给组件来解决此问题。
在我的情况下,我无法编译,因为它无法识别TArray<System.Byte>
参数。
我试图包含<System.hpp>
,但它没有帮助。
是否有人使用TArray
设法解决了这个问题?
功能声明:
void __fastcall UDPServerUDPRead(TIdUDPListenerThread *AThread, TArray<System.Byte> AData, TIdSocketHandle *ABinding);
提前致谢...
答案 0 :(得分:1)
好的,我解决了。
我记得我使用idUDPServer
控件成功升级了早期项目,没有任何问题。那么为什么代码编译而不是新代码呢?
经过一些研究后,我发现显然Delphi(我知道,很奇怪.C ++ Builder部分用Delphi编写)将所有类型解析为基本形式,TArray<System.Data>
类型存在问题。
我从已转换的项目中复制了声明:
void __fastcall UDPServerUDPRead(TIdUDPListenerThread *AThread, TIdBytes AData, TIdSocketHandle *ABinding);
如您所见,TArray<System.Data>
已替换为TIdBytes
。它编译时没有任何警告或错误。您仍然必须手动分配事件功能,但(在创建事件中)。
UDPServer->OnUDPRead = &UDPServerUDPRead;
*编辑*
将代码TBytes
更新为TIdBytes
作为Remy Lebeau - TeamB纠正了我。