Un lanzamiento instantáneo comprueba el tipo de objeto real para asegurarse de que el lanzamiento sea válido y genera una excepción si no lo es. Un "hard cast" (estilo TMyClass(MyObj)
) no se comprueba, simplemente le dice al compilador que asuma que el elenco es válido.
Si tiene una situación en la que ClassNameIs devuelve verdadero pero el lanzamiento en falso falla, eso significa que tiene dos clases diferentes en dos unidades diferentes con el mismo nombre, y que el reparto está intentando convertir al incorrecto uno. Esto también significa que su colada dura está lanzando a la incorrecta, lo que podría conducir a la corrupción de la memoria.
Ejecute una búsqueda de proyecto completa para "TMyclass =" para ver dónde están sus declaraciones múltiples, y cambie el nombre de una de las clases o use una definición completa (obj como MyUnit.TMyClass) para que el compilador sepa qué clase es usted ' Estoy tratando de lanzar a.
Eso es un montón de etiquetas. Creo que 'delphi' sería suficiente. –
Gracias por señalar el problema que acabo de señalar –
¿Utiliza DLL? Las DLL arruinan la identidad de clase. –