1

我在 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};

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

void __fastcall TForm1::MBDNumEdit1ValueChange(TObject *param_0)

代替:

void __fastcall TForm1::MBDNumEdit1ValueChange(TObject *Sender)

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

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

4

1 回答 1

0

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

RSP-15602:将 CLang 编译器与导入的 OCX 一起使用时,事件的参数名称不正确

RSP-21807:C++ 组件事件中的错误参数名称(在 Clang 项目中使用):param_0 而不是 Sender...

RSP-28047:为来自导入的 ActiveX 控件的回调创建了错误的函数头

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

于 2021-09-22T05:31:19.503 回答