It looks like directcast require actual implementation or inheritance and success. It looks to me the way it is implemented is that vb.net will simply change the pointer type without bother changing anything.
Ctype works as long as there are conversion. Does that mean it runs conversion constructor?