为注册组件创建事件处理程序的问题

Issue with creating event handlers for registered components

我有一个在 RAD Studio C++Builder 10.2 中创建的包,其中包含许多新组件。我按如下方式注册每个组件(在组件的 .cpp 文件的底部):

namespace Tmbdstringgrid_component
{
    void __fastcall PACKAGE Register()
    {
         TComponentClass classes[1] = {__classid(TMBDStringGrid)};
         RegisterComponents(L"MyComponents", classes, 0);
    }
}

这些组件有新的事件处理程序,例如:

__property TNotifyEvent OnValueChange = {read=FOnValueChange, write=FOnValueChange};

安装包含这些组件的包后,在设计时将这些组件之一添加到窗体,然后通过在对象检查器中双击事件来创建事件处理程序,我得到以下信息:

void __fastcall TForm1::MBDNumEdit1ValueChange(TObject *param_0)

而不是:

void __fastcall TForm1::MBDNumEdit1ValueChange(TObject *Sender)

有人可以帮忙吗?为什么它不显示事件类型中定义的正确名称,而是使用 param_0param_1 等?

我怀疑这与组件的注册方式有关。

您的代码没有任何问题。当使用 Clang 编译器而不是经典的 Borland 编译器时,这只是 C++Builder 10.2 和 10.3 中的一个已知错误:

RSP-15602: When using CLang compiler with imported OCX the parameter names are not correct for events

RSP-21807: Wrong parameter names in events for C++ components (used in Clang projects): param_0 instead of Sender...

RSP-28047: Wrong function header created for callbacks from an imported ActiveX Control

不确定这个问题在 10.4 和 11.0 中是否仍然存在,但门票仍然开放。