Un cast controlla il tipo di oggetto effettivo per assicurarsi che il cast sia valido e genera un'eccezione se non lo è. Un "hard cast" (stile TMyClass(MyObj)
) non controlla, dice semplicemente al compilatore di presupporre che il cast sia valido.
Se hai una situazione in cui ClassNameIs restituisce true ma l'as-cast fallisce, significa che hai due classi diverse in due diverse unità con lo stesso nome, e l'as-cast sta provando a lanciare in modo errato uno. Ciò significa anche che il tuo hard-cast sta trasmettendo a quello sbagliato, il che potrebbe potenzialmente portare alla corruzione della memoria.
Eseguire una ricerca completa del progetto per "TMyclass =" per vedere dove sono le vostre dichiarazioni multiple e rinominare una delle classi o utilizzare una definizione completa (obj come MyUnit.TMyClass) in modo che il compilatore sappia quale classe si ' sta cercando di trasmettere a.
fonte
2010-03-15 19:24:48
Questo è un bel po 'di tag. Penso che "delphi" sarebbe sufficiente. –
Grazie per aver segnalato il problema, stavo solo indicando –
Usi le DLL? Le DLL rovinano l'identità della classe. –