You're using ProgressInvokeNever in which case you should probably pass nil for the fnProgress parameter (
MSDN: If no progress function is to be used, set this parameter to NULL). What variable type is ffilename? If it's a string try PWideChar(WideString(ffilename)).
I think Luckie is right about the @:
//
// Progress Function:
// Caller of tree operation implements this Progress function, then
// passes its function pointer to tree operation.
// Tree operation invokes Progress function to provide progress and error
// information to the caller during the potentially long execution
// of the tree operation. Tree operation provides the name of the object
// last processed and the error status of the operation on that object.
// Tree operation also passes the current InvokeSetting value.
// Caller may change the InvokeSetting value, for example, from "Always"
// to "Only On Error."
//
Edit: Robert posted while I was writing mine, missed that sorry