Hallo nach Bezug auf http://www.mono-project.com/Embedding_Mono Ich kann Methoden aus verwaltetem Code aufrufen, indem Sie mono_runtime_invoke verwenden.Übergabe (Funktion) Zeiger zwischen c und Mono
Jetzt möchte ich mit einem Funktionszeiger (oder zumindest einige Zeiger) als Argument von nativen C-Code
ein Verfahren, in dem verwalteten Code aufzurufen Code verwaltet
public delegate void MyDelegate();
//method i want to call from native code
public static MyDelegate mono_method(MyDelegate c_ptr)
{
//...do sth
return c_ptr;
}
nativen Code
typedef void (*FUNC_PTR)();
FUNC_PTR my_fct_ptr = some_c_function;
//calling the managed method
MonoObject *result_of_mono_method =
mono_runtime_invoke(mono_method, NULL, my_fct_ptr, NULL);
edit: das Problem
, wie ich nennen
aus nativem c-code, ohne dllImport zu verwenden.
Ich bekomme den Punkt in beiden Optionen nicht, wo der c-Zeiger in C# geht. Kannst du vielleicht ein Beispiel schreiben oder etwas aufklären? – Gobliins
Eine andere Option wäre, aus dem systemeigenen Code eine bestimmte C# -Methode aufzurufen, die ein IntPtr-Objekt verwenden und Marshal.GetDelegateForFunctionPointer aufrufen würde. –
hmm idk, wenn ich dich falsch verstehe. Aber ich möchte nicht eine Mono-Methode auf einen c-Funktionszeiger setzen. Ich möchte nur eine Mono-Methode mit einem Zeiger als Argument und Rückgabewert aufrufen. – Gobliins