VC开发的DLL,有一函数申明如下:
LONG CO_SerialStart(LONG lUserID,LONG lSerialPort,void(CALLBACK *fSerialDataCallBack)(LONG lSerialHandle,char *pRecvDataBuffer,DWORD dwBufSize,DWORD dwUser),DWORD dwUser);在C#中相应的申明如下:
[ DllImport( "XXX.dll" )]
public static extern int CO_SerialStart(int lUserID, int lSerialPort, [ MarshalAs( UnmanagedType.FunctionPtr )]SerialDataCallBack* fSerialDataCallBack , uint dwUser);
对应的回调函数如下:
public delegate void SerialDataCallBack(int lSerialHandle, string pRecvDataBuffer, uint dwBufSize, uint dwUser);调用如下:
SerialDataCallBack sdCallBack = new SerialDataCallBack(My_CallBack_Function_Name);
int t = Co_SerialStart(userId, serialPort, sdCallBack, 0);  问题:
t的返回值正确,但我的回调函数(My_CallBack_Function_Name)没有执行,也没有错误产生,请问该如何解决,或给些建议也好。多谢!

解决方案 »

  1.   

    Have a try!public delegate void SerialDataCallBack(int lSerialHandle, StringBuilder pRecvDataBuffer, uint dwBufSize, uint dwUser);[ DllImport( "XXX.dll" )]
    public static extern int CO_SerialStart(int lUserID, int lSerialPort, [ MarshalAs( UnmanagedType.FunctionPtr )]SerialDataCallBack fSerialDataCallBack , uint dwUser);
      

  2.   

    首先要确定两边的调用约定是否一致,不一致都有可能是错的。我现在想知道怎么在C#中改变方法的调用约定。改称_cdecl.