DuHarTapt
09-12-2008, 13:12
C
typedef void (*mia_uno)(int a);
extern "C" __declspec(dllexport) void create(classe1 a1, mia_uno b2)
{
// fa quel che deve fare
}
C#
delegate void mia_uno(int a);
[DllImport("test.dll")]
internal static extern void create(IntPtr a1, mia_uno b2 );
IntPtr ptr; // viene inizializzato altrove
private void testing()
{
mia_uno delMia = new miaDel(funccall);
create(ptr, delMia);
}
private void funcall(int i)
{
Console.WriteLine("ciao" + i.toString());
}
Ho sbagliato qualcosa?
Tutto questo genera "Eccezione win32 non gestita". :confused:
In msdn ho trovato che l'istanza del delegate deve coprire il tempo di vita del codice unmanaged. Potrebbe essere questo il problema?
Come si fa a fare ciò?
typedef void (*mia_uno)(int a);
extern "C" __declspec(dllexport) void create(classe1 a1, mia_uno b2)
{
// fa quel che deve fare
}
C#
delegate void mia_uno(int a);
[DllImport("test.dll")]
internal static extern void create(IntPtr a1, mia_uno b2 );
IntPtr ptr; // viene inizializzato altrove
private void testing()
{
mia_uno delMia = new miaDel(funccall);
create(ptr, delMia);
}
private void funcall(int i)
{
Console.WriteLine("ciao" + i.toString());
}
Ho sbagliato qualcosa?
Tutto questo genera "Eccezione win32 non gestita". :confused:
In msdn ho trovato che l'istanza del delegate deve coprire il tempo di vita del codice unmanaged. Potrebbe essere questo il problema?
Come si fa a fare ciò?