You do not need to check types to do what you want to do. You should look at Visitor pattern.
You can find all information about it in GoF book or at www.dofactory.com, but let me explain my point:
Your external class will implement IVisitor interface that will have methods DoDerivedA(), DoDerivedB and DoDerivedC. After that you should add to BaseClass virtual function that will use your external class:
public virtual void DoExternal(IVisitor v){}
DerivedA will override this method like that:
v.DoDerivedA();
After that you`ll have something like that in your External:
AcceptBaseByExternal(BaseClass derivedInstance)
{
derived.DoExternal(this);
}
This will do anything you want according to the actual class type. All you need is create a specific method for every derived class.
When I wrote it I also thought that you could create one method in your ExternalClass instead of single method for single derived class and parametrize it with some parameter. E.g. implement virtual function in BaseClass that returns enum and every derived should override that enum so that ExternalClass know what code it should execute.