1

我正在尝试将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);

提前致谢...

4

1 回答 1

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;

* 编辑 *将 代码更新TBytesTIdBytesRemy Lebeau - TeamB 纠正了我。

于 2011-12-04T22:29:11.147 回答