Phil Middlemiss asked:

> Thanks Max, I thought it was something like that, but didn't 
> know the specifics. BPL's are out of the question for us... 
> we looked at that and ruled it out earlier since the 
> versioning nightmare is even worse than with DLL's. Is the 
> BPL the only way around it?

I've looked at the code concerned, _IsClass and _AsClass in System.pas that
implement 'is' and 'as' to support the compiler, and the only fix I can
think of is exactly equivalent to the solution you already have.

Anyway what you could do is runtime patch the _IsClass and _AsClass (plus
optionally TObject.InheritsFrom) routines to perform a jump into alternative
code that does the same walk up the VMT parent poiner list, but compares by
name rather than VMT pointer.

But apart from that the entire Delphi object supprt code is based on the
concept of an object being a a point to a block of memory, the first 4 bytes
of which are the pointer to the objects VMT. The only possible way to
intercept this behaviour would be to hack TObject.InitInstance to create
objects instances with the VMT pointer set to the EXE's VMT rather than the
DLL's VMT. To do this you would need to export some sort of help function
from the EXE that could return the VMT pointer for a named class and use
this in the DLL's.

Cheers, Max.




_______________________________________________
Delphi mailing list
[EMAIL PROTECTED]
http://ns3.123.co.nz/mailman/listinfo/delphi

Reply via email to