MethodDesc::Call is used in the EE itself to call the managed code. Here is an example from comutilnative.cpp:
MethodDesc *pMD = g_Mscorlib.GetMethod(METHOD__EXCEPTION__GET_MESSAGE); ARG_SLOT GetMessageArgs[] = { ObjToArgSlot(objException) }; MessageString = (STRINGREF)ArgSlotToObj(pMD->Call(GetMessageArgs, METHOD__EXCEPTION__GET_MESSAGE)); In order to call your own method from the EE code, you need to add an entry in clr\src\vm\mscorlib.h. Entry in mscorlib.h will give you the METHOD__XXX constant. If your method has unusual signature, you may also need to add an entry to clr\src\vm\metasig.h in order to complete the entry in mscorlib.h. MethodDesc::Call should be used inside HELPER_METHOD_FRAME_BEGIN/HELPER_METHOD_FRAME_END since it needs a valid frame to be erected. If your method is not in mscorlib, I would recommend adding a small method to mscorlib that will call your non-mscorlib method. Check LoadISymWrapper method in clr\src\BCL\System\Reflection\Emit\AssemblyBuilder.cs to see how to do it. -Jan This posting is provided "AS IS" with no warranties, and confers no rights. -----Original Message----- From: Discussion of the Rotor Shared Source CLI implementation [mailto:[EMAIL PROTECTED] On Behalf Of Ricardo Mendes Sent: Monday, July 07, 2003 8:13 AM To: [EMAIL PROTECTED] Subject: [DOTNET-ROTOR] When to call code after the GC Hello all, What is the best place to call managed code after a GC? I tried to call managed code after the HELPER_METHOD_FRAME_END(); call in the FCIMPL1(void, GCInterface::CollectGeneration, INT32 generation) method (in the comutilnative.cpp file) but it just keeps on firing assertions. I want to call managed code using something like FFI. It would be great to call the code I want from managed code but I don't know if it's possible. Any ideas regarding a place in which I can call managed code safely after a GC? Thanks in advance for any help... Ricardo Mendes Distributed Systems Group INESC-ID Lisbon, Portugal