RegisterShellEvent gets "no overloaded version" error

delphi package - easy access to shell apis

RegisterShellEvent gets "no overloaded version" error

Postby flightrisk » Tue Mar 01, 2011 1:29 am

I'm getting "There is no overloaded version of "RegisterShellEvent" and UnRegisterShellEvent. " I am in Delphi XE and copied the code right out of the example code on the WEB. I tried just RegisterShellEvent(ShellEvent) with no parameters and that won't even work. I can't figure out what parameter doesn't match. Can anyone help?
flightrisk
 
Posts: 6
Joined: Mon Feb 28, 2011 11:12 pm

Re: RegisterShellEvent gets "no overloaded version" error

Postby flightrisk » Tue Mar 01, 2011 2:45 am

I'll answer my own question ;) It looks like the examples have not been updated along with the source. With Delphi 2009 and above, the base types for certain things like string and char were changed for UNICODE. So where before a char was mapped to an ansichar, it is now mapped to a widechar. So this line:

procedure ShellEvent(event: TShellEventType; const obj1, obj2: IShellObj; drive: char; value: cardinal);

Is incorrect since the soure type for ShellEvent has "drive" declared as an ansichar. This code will work in Delphi 2007 and below since char and ansichar are ths same. But in XE, where I live, char mapped to a widechar and broke the code. Change the drive: char to drive: ansichar.
flightrisk
 
Posts: 6
Joined: Mon Feb 28, 2011 11:12 pm

Re: RegisterShellEvent gets "no overloaded version" error

Postby madshi » Tue Mar 01, 2011 7:42 am

You got it. I've chosen the "easy" way to make madCollection work with UNICODE Delphi versions: I've forced all strings and chars to stay ansi. I might implement proper UNICODE support in a future version.
madshi
Site Admin
 
Posts: 9477
Joined: Sun Mar 21, 2004 5:25 pm

Re: RegisterShellEvent gets "no overloaded version" error

Postby flightrisk » Tue Mar 01, 2011 2:10 pm

Great job on all the code by the way. I went through a painful conversion of a set of VCL and ActiveX controls that have over 100,000 lines of code. It was all API code with strings, pchars, pointers to C structures in memory and pointer math. I had to go over it line by line. What took me a while to figure this issue out was that the IDE pointed to the wrong parameter in a function and I had to "find declaration" all the way through each type and function until I worked through the chain. The error line pointed to the last parameter in the event function, not in the "register" and "unregister" functions where the problem actually was. So I focused on it probably being an unicode/XE issue and looked for each definition and compared anything that was a string or char to every other function.

On another note, did you used to do the folder watching with another API function? I have a control I found the source for and modified it slightly but it doesn't work in any pattern I can decipher. It uses SHChangeNotify and seems to behave differently if I copy a file to the folder or use a text editor to save the file to the folder or use my own test program to write a file to the folder. When I do the file write, it gets the folder change the first time, but then will not recognize any further deletes or new file creates if I use the same name. Very strange. I was going to change over to the ReadxxxW function when I found your great unit. Works better anyway, but I would still like to find out what is wrong with the other way. That control has individual event handlers for each messages like OnDirChange, OnItemChange, OnDirDelete, etc. I like individual event handlers for some reason, but realize that a case statement in one event handler is functionally the same. Again, great job.
flightrisk
 
Posts: 6
Joined: Mon Feb 28, 2011 11:12 pm

Re: RegisterShellEvent gets "no overloaded version" error

Postby madshi » Tue Mar 01, 2011 2:16 pm

It's a long time since I wrote madShell. I don't remember all the dirty details, but from what I have in mind SHChangeNotify wasn't really working so well. The ReadxxxW functions work much better, IIRC.
madshi
Site Admin
 
Posts: 9477
Joined: Sun Mar 21, 2004 5:25 pm


Return to madShell

Who is online

Users browsing this forum: No registered users and 1 guest