On Thu, 2005-07-21 at 22:26 -0600, Peter Dennis Bartok wrote: > Jonathan, if you read through the DnD OLE code in the MWF win32 driver, you > will see that I'm doing exactly that.
This works because you're invoking a COM method, which has a well-defined ABI (stdcall calling convention, all arguments passed on the stack and NOT in registers, etc.). This will NOT work for any arbitrary C++ method because each compiler has a different calling convention (register usage, parameter order on the stack, how to deal with exceptions). > -----Original Message----- > From: "Jonathan S. Chambers" <[EMAIL PROTECTED]> > Perhaps a crazy question, but I'll ask anyway. Is it possible to call > an unmanaged class's member function using the calli opcode with the > thiscall calling convention, i.e. can I call a (virtual) method on a C++ > object from managed code by emitting the necessary il (via a dynamic > method)? This is unlikely to work as well, because the C++ ABI is not standardized (except on Itanium). Consequently, whether a register is used for the `this` pointer (and which register) is not implementation-dependent, as well as whether a virtual function table is used (and it's location relative to the start of the object). Portability is...difficult. :-) If you have control over both mono and a C++ compiler, or you're programming against a stable ABI (COM), this technique could be useful. Otherwise, it's looking difficult. - Jon _______________________________________________ Mono-devel-list mailing list Mono-devel-list@lists.ximian.com http://lists.ximian.com/mailman/listinfo/mono-devel-list