winnt32.exe on AMD64
wine at troy.rollo.name
Tue Jul 18 01:53:53 CDT 2006
On Tuesday 18 July 2006 16:28, Ge van Geldorp wrote:
> It's an intriguing idea, but I can't see how it could work for even
> slightly complex cases. Take the COM calls. When the COM object is
> constructed, you have absolutely no idea whether its methods are going to
> be called from a Wine or from a PE environment.
No, but if an interface pointer to it is being made known to another part of
the system then this will be done through some API call that will have to be
(made) aware of which calling convention has been used to provide the pointer
(or which is a more complex thunk). Internally if it came from a PE context,
it would need to create a new pointer that would be to an object created
based on the IDL for the interface, the new pointer being something using the
host calling convention that passes all calls on to the original interface
(essentially, more thunks).
It might be useful for the newly created object to have a WINE-specific
interface available for querying whether it is a thunk and identifying the
original pointer so that when passing the pointer back to a PE context we can
just pass the original pointer (rather than creating a new Win64 calling
convention object that directs back to the host calling convention object
which in turn directs back to another Win64 calling convention object).
The complexity of this is such that most of it would have to be done by
writing code generators rather than by writing the code directly, however the
languages that would be inputs to the code generators are largely already
defined (IDL and Wine's spec files).
No doubt it would be easier to wait for gcc to support the Win64 calling
convention, but that is not the only option.
Troy Rollo - wine at troy.rollo.name
More information about the wine-devel