Hola a todos,
Estoy intentando mapear una función del SDK de Windows Mobile con
pinvoke, pero algo tengo que estar haciendo mal, porque al llamar a
esta función, me tira tanto Visual Studio como el simulador.
La función es:
HRESULT SimInitialize (
DWORD dwFlags,
SIMCALLBACK lpfnCallBack,
DWORD dwParam,
LPHSIM lphSim
);
SIMCALLBACK es un puntero a función de este tipo:
typedef void (*SIMCALLBACK) (
DWORD dwNotifyCode,
const void * pData,
DWORD dwDataSize,
DWORD dwParam
);
He utilizado un delegado para poder pasar la función. El código en C#
es el siguiente:
public class SimWrapper
{
public delegate void SimCallBack(
uint dwNotificationCode, ref SIMPBCHANGE pData,
uint dwDataSize, uint dwParam);
[DllImport("cellcore.dll")]
public static extern IntPtr SimInitialize(IntPtr dwFlags,
SimCallBack lpfnCallBack,
IntPtr dwParam, out IntPtr lphSim);
}
Luego la llamada a SimInitialize es así:
private static SimWrapper.SimCallBack callBackFunc new SimWrapper.SimCallBack(this.CallBack);
IntPtr s = SimWrapper.SimInitialize(0x00000001,
callBackFunc,
IntPtr.Zero, out hSim);
Si mapeo la función pasando un IntPtr al parámetro SIMCALLBACK, no
tengo ningún problema. Pero el caso es que necesito pasar
correctamente ese parámetro para poder capturar las llamadas a la
función de callback. Actualmente, cuando se ejecuta SimInitialize,
ocurre un error y se cierra el VS y el simulador se queda colgado.
Estoy trabajando con Visual Studio 2005 y la versión 2.0 del Compact
Framework.
A ver si alguien puede echarme una mano.
Un saludo y gracias.
Leer las respuestas