On 13.05.11 16:31, Jonathan Pryor wrote:
> On May 13, 2011, at 3:49 AM, Martin Däumler wrote:
>> I learned that PInvoke and Internal Call methods are
>> quite the same.
>
> Not quite the same. P/Invoke marshals arguments, internal calls do not.
>
> For a glaring difference between these, consider System.String arguments. 
> With P/Invoke, they become `char*` or `unsigned short*` values (depending on 
> whether it's UTF-8 or UTF-16 marshaling), and may involve copying the data 
> (for UTF-8 conversion). With Internal calls, the native code gets a 
> MonoString*, no marshaling at all.
>
> Internal calls can also get any managed type passed to them (e.g. 
> System.Object); they just become a MonoObject* in native code. Not all types 
> can be used with P/Invoke (e.g. System.Object can't be used in P/Invoke).


Hello,

thank you for your answer! That helped me a lot. However, now
I have another question:

How do runtime calls like

        System.Threading.ThreadStart:Invoke(),
        System.Threading.WaitOrTimerCallback:Invoke() or
        System.UnhandledExceptionEventHandler:Invoke()

(there are more of it) work? Do I understand it right and
all runtime calls are delegates that are called through
"mono_runtime_invoke()", thereby using a delegate trampoline?


With kind regards,
Martin Däumler
_______________________________________________
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list

Reply via email to