прохождение (функция) указателей между c и mono - PullRequest
1 голос
/ 13 декабря 2010

Привет после ссылки на http://www.mono -project.com / Embedding_Mono Я могу вызывать методы из управляемого кода с помощью mono_runtime_invoke.

Теперь я хочу вызвать метод из управляемого кодас указателем функции (или, по крайней мере, некоторым указателем) в качестве аргумента из собственного кода c

управляемого кода

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;  
}

собственного кода

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: указатьпроблема
как я могу позвонить

public static unsafe int* mono_method(int *c_ptr)

из собственного кода c, без использования dllImport.

Ответы [ 2 ]

1 голос
/ 13 декабря 2010

У вас есть несколько вариантов. Одним из них является добавление внутреннего вызова, который принимает IntPtr (указатель функции) и аргументы: затем вы приведете указатель к типу указателя на функцию и вызовите его обычно из кода C. Использование чего-то вроде libffi может помочь преодолеть ограничение наличия только одного типа указателя функции, это зависит от того, сколько вам нужно, вы не указали.

Другой вариант - использовать Reflection.Emit для построения динамического метода: в нем вы будете использовать инструкцию calli IL для непосредственного вызова указателя на функцию.

0 голосов
/ 13 декабря 2010

Я не совсем уверен, что вы пытаетесь спросить здесь, но это - самый простой способ перезвонить.

...