Incorrect parameter for custom event handler

c++ builder

    Sponsored Links

    Next

  • 1. Linking component problem - working
    Okay, it is working, but it seems to be a strange fix. I noticed that the obj files had not been updated since before I compiled the component package under BDS2006. So I went to the linker output section of the Project Options where I had previously selected "Generate All C++Builder Files", and instead selected "Generate C++ Object files". The result of this was that it created up to date obj files, but not a .bpl file. So then I had to go back and re-select "Generate All C++Builder Files" to create a .bpl file. Installed the new package. And it works. When it says Generate ALL C++Builder files, I guess it doesn't really mean all. Why is this a two step operation? Am I missing something here, should I have done it differently? Thanks for your help Craig.
  • 2. Linking component problem
    I have been upgrading my BCB4 project to BDS2006. Part of that involves installing an old delphi component (TPagePrinter). But I need it in the meantime. I finally got it to show up on both palettes, dealt with designintf ..., and dealt with the duplicate resource error and a bunch of other errors that a lot of others seemed to encounter as well (thanks to all who have helped previous posters). But I am stumped right now. I am getting unresolved external errors. I have googled and read through a ton of messages on the topic but I am unable to move past this. [Linker Error] Error: Unresolved external '__fastcall Graphics::TFont::SetSize(int)' referenced from C:\PROGRAM FILES\BORLAND\BDS\4.0\COMPONENTS\PAGEPRNT.OBJ [Linker Error] Error: Unresolved external 'System::__linkproc__ __fastcall LStrLAsg()' referenced from C:\PROGRAM FILES\BORLAND\BDS\4.0\COMPONENTS\PAGEPRNT.OBJ [Linker Error] Error: Unresolved external 'System::__linkproc__ __fastcall LStrAddRef()' referenced from C:\PROGRAM FILES\BORLAND\BDS\4.0\COMPONENTS\PAGEPRNT.OBJ etc. I get these errors even when I drop the component on a blank project form. It works fine when I run a delphi project. But I need it to work on C++Builder. I tried adding vclx.lib to the project to no avail. It seems like a path problem, but I am not sure which one and where to point it. Help would be appreciated.
  • 3. vcl100.bpl not found
    Hi, I am working with the Borland Developer Studio 2006 and can no longer run any of my compiled .exe files on any another computer. The error message I get is "vcl100.bpl not found" Can anyone help me to fix this problem? Thanks, Edward Wechner
  • 4. TButton in TEdit component
    Hi all, I have created a component from TCustomEdit, and I have insert a button: void __fastcall TPddPathEdit::CreateWnd() { TCustomEdit::CreateWnd(); btn=new TButton(this); btn->Parent =this; btn->Align =alRight; btn->Width =btn->Height; btn->Caption="..."; btn->OnClick=btnClick; } But when the focus goes on my edit, I lost the refresh on my button (it becomes white). Can I avoid this effect? Thanks
  • 5. Scrool of IPhone for C++Builder
    Anyone here see a component for C++Builder like Scrool of Iphone using acceleration to movce down and up ? It will be cool. Edward

Incorrect parameter for custom event handler

Postby Myles Rippenhagen » Wed, 26 Oct 2005 02:43:50 GMT

Hi,

I have created several custom components and generally have had great 
success with them, but I am currently running into a problem where when I 
double-click on a published custom event (on the "Events" tab of the "Object 
Inspector" in the IDE), the inserted method declaration contains the wrong 
variable name.  The signature matches another, similar custom event, and it 
seems to be picking up the parameter name from this other definition.  I 
have double-checked that I am referencing the correct typedef in the 
definition of my custom component and I didn't see any problem.  I am using 
BCB6 Enterprise on WinXP.  Following are the important bits of the code.

...
typedef void __fastcall (__closure *BeforePostEvent) (TObject* Sender, bool 
&CanPost);
typedef void __fastcall (__closure *OnPutToDatabaseEvent) (TObject* Sender, 
bool &DoDefault);
...
private:
   OnPutToDatabaseEvent FOnPutToDatabaseEvent;
...
__published:
   __property OnPutToDatabaseEvent OnPutToDatabase = 
{read=FOnPutToDatabaseEvent, write=FOnPutToDatabaseEvent};
...

When I double-click on the "OnPutToDatabase" event in the IDE, the inserted 
code labels the bool parameter "CanPost" instead of "DoDefault".  It appears 
to just pick up the first typedef with a matching signature instead of using 
the typdef that I specified.

Any suggestions??



Re: Incorrect parameter for custom event handler

Postby Remy Lebeau (TeamB) » Wed, 26 Oct 2005 03:12:24 GMT







That is a long-standing known issue.  The OI matches events by signatures
only, not names.  You have two different events that have the exact same
signature (return value, calling convention, parameter data types, and
parameter ordering).  The OI always generates code using the first event
type that matches the required signature.


That is exactly why you are seeing what you have described.  There is
nothing you can do to prevent the OI from behaving that way.  You will just
have to change the signature of one of your events so that they no longer
match each other.


The OI does not care about typedefs.  It only cares about signatures.


Gambit



Similar Threads:

1.Why event handler first parameters are incorrect

I noticed that DataGridView CellValidated() and other event handler first 
parameter is object:

        Grid.CellValidated+=new 
DataGridViewCellEventHandler(Grid_CellValidated);
...

        void Grid_CellValidated(object sender, DataGridViewCellEventArgs e) 
{
....
}

Why ? Correct signature must be

void Grid_CellValidated(DataGridView sender, DataGridViewCellEventArgs e) {

Andrus. 

2.Custom event handler

Hello, all.  I am trying to develop my first component and I am trying to
figure something out.  I created a MouseMove event handler for my component
(TMyComponent::MouseMove) and it works fine.  I added my component to a new
project (TMyComponent *MyComponent1) and I want perform a task in the
MyComponent1MouseMove event.  My problem is that the TMyComponent::MouseMove
function is executing, but the TForm1::MyComponent1MouseMove function is
not.  I set the OnMouseMove event to MouseMove for the MyComponent1
instance, but it still only calls the component handler, not the custom
handler.  Why won't it call my custom handler?  Actually, I will need both
functions to execute.  Will I need to explicitly call
TMyComponent::MouseMove() from within the TForm1::MyComponent1MouseMove
function to get both to execute?  Any feedback will be greatly appreciated.

Thanks,

Mark


3.Custom event handlers in .NET Winforms

4.Custom Event Handler

I am getting an error down below, this same code works in VB, what gives?

private void Form1_Load(object sender, System.EventArgs e)

{




System.Windows.Forms.LinkLabel l = new System.Windows.Forms.LinkLabel();

FileSystemWatcher watcher = new FileSystemWatcher();

watcher.Path = @"C:\TempFolder";

watcher.Filter = "*.txt";

//error here: Cannot implicitly convert type System.EventHandler to
FileSystemWatcher,

watcher.Created += new System.EventHandler(OnCreated);

watcher.EnableRaisingEvents = true;





}

private void OnCreated(object sender, System.EventArgs e)

{

MessageBox.Show("yo");











}


5.Custom event handlers and searching a listview

6. Passing in a OnMouseDown/OnMouseUp event handler as a parameter of a function

7. How to pass more than two parameters in the event handler

8. TADODataset.Parameters.Refresh results in incorrect parameter names



Return to c++ builder

 

Who is online

Users browsing this forum: No registered users and 72 guest