Punteros C#

02/05/2009 - 11:10 por Mythox | Informe spam
Hola:

Tengo que hacer una integracion desde C# con una libreria de C++ y tengo
algunos problemas con las conversiones de tipos, los punteros y otras cosas
que la verdad me suenan un poco a chino :(

En el archivo sdk.h tengo esta declaracion:

typedef void (__stdcall iidk_frame_callback_func)(int Chan,const char*
m_sFileId,int nCurrentFrame,int nTotalFrames,byte *pImage,int nWidth,int
nHeight,SYSTEMTIME &sysTime,unsigned long user_param);
typedef void (__stdcall iidk_callback_func)(const char* msg,const char*
slave_id,unsigned long user_param);
typedef void (__stdcall iidk_old_func)(const char* msg) ;
IIDK_API BOOL __stdcall Connect4(LPCTSTR ip, LPCTSTR port, LPCTSTR id,
iidk_callback_func* lpfunc,
iidk_frame_callback_func* lpframe_func,
iidk_user_data_func* iidk_user_data_func,
DWORD user_param,int async_connect,DWORD connect_attempts);

Bien, ahora lo quiero llamar desde mi aplicacion, con este codigo:

public delegate void OnMensajeNuevo(string msg,string slave_id,ulong
user_param);
public delegate void OnFrameVideo(int Chan,string m_sFieldId,int
nCurrentFrame,int nTotalFrames,byte pImage,int nWidth,int nHeight,DateTime
sysTime,ulong user_param);
public delegate void OnUserData(int nIdent, byte pBuffer, int dwSize, ulong
user_param);

OnMensajeNuevo onMensajeNuevo = new OnMensajeNuevo(NuevoMensajeNuevo);
OnFrameVideo onFrameVideo = new OnFrameVideo(FrameVideo);
OnUserData onUserData = new OnUserData(UserData);

[DllImport("sdk.dll")]
public static extern bool Connect4(string ip,string port,string id,
OnMensajeNuevo OnMensaje,OnFrameVideo OnFrame,OnUserData
OnUserData,int user_param,int async_connect,int connect_attempts);

Implemento los metodos correspondientes para los delegados y en la llamada a
Connect4 los paso como parametros, conecta bien y funciona, pero no recibo
los eventos a traves de los delegados.

Creo que el problema son los esteriscos de la declaración en C++, son
punteros, he estado leyendo y he probado a implentarlos en C# con "unsafe"
pero no he podido ...

¿Como tengo que hacer la declaración en C# para que funcione? ¿Creeis que el
problema son los *?

Gracias.
 

Preguntas similares