C++:
回调函数:
int CALLBACK data_callback(char *pserver_ip, int channel,void *buf, int len, void *context)
{
   unsigned long play_id = (unsigned long)context;
   st_player_inputNetFrame(play_id, (char *)buf, len);
   return 0;
}st_net_registerChannelStreamCallback(m_hUserID,channelID, data_callback, (void *)m_hPlayID);  C# :
   [DllImport("decNetLib.dll", EntryPoint = "st_net_registerChannelStreamCallback", CharSet =CharSet.Unicode)]
   public static extern int st_net_registerChannelStreamCallback (int user_id, int channel, [MarshalAs(UnmanagedType.FunctionPtr)]CallBack callback, IntPtr context);  [DllImport("Play.dll", EntryPoint = "st_player_inputNetFrame", CharSet = CharSet.Auto)]
        public static extern int st_player_inputNetFrame (int player_id, IntPtr buf, int size);
       [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
    public delegate void CallBack (string pserver_ip, int channel, IntPtr buf, int len, IntPtr context);        public static void C_CallBack (string pserver_ip, int channel, IntPtr buf, int len, IntPtr context)
        {
            int play_id = context.ToInt32();
            DLL.st_player_inputNetFrame(play_id, buf, len);//这里出现问题  程序到这里就崩溃了
        }  CallBack callback = null;  private void button1_Click (object sender, EventArgs e)
        {
            callback = new CallBack(C_CallBack);
            IntPtr intptr = new IntPtr(playerId);
            a = DLL.st_net_registerChannelStreamCallback(userId, 0, callback, intptr);
        }      有人遇到过这样的问题吗?  怎么解决的? 

解决方案 »

  1.   

    错误提示是什么。
    另外,string,长度固定么。组合一些attribute试试吧。
      

  2.   

    char* 可以改为intptr吗只是疑问
      

  3.   

       我这是调用一个SDK 播放视频:
       程序运行后 可以看到视频  但是等到 5到10 秒后就出现错误了   "0x10005c8e" 指令引用的"0x000034a0"内存。该内存不能为"written".
      就是这样的  然后点击“确定” 程序就退出了   Char *   我转成String 类型的  就放不了视频 还会报错  最后我改成 IntPtr 可以放视频 但也有错
      

  4.   

    最讨厌这些打劫的了,一点技术含量都没有。
    曾经遇到过,初步估计是buf的问题,另外你的回调函数似乎不正确也。
    C++里的回调函数定义是int的。
    public static int C_CallBack (string pserver_ip, int channel, IntPtr buf, int len, IntPtr context)
      {
      int play_id = context.ToInt32();
      DLL.st_player_inputNetFrame(play_id, buf, len);//这里出现问题 程序到这里就崩溃了
      return 0;
      }
      

  5.   

      这个没影响啊  开始的时候我就弄的是 int  
     
      

  6.   

      buf 的值  需要是定值吗? 我调试的时候看的  每次相对于上一次 减少了 20(比方:78784587 -- 78784567
      

  7.   

        mjp1234airen4385 
        你好  你那个时候怎么解决的呢? 
      
         还有谁遇到过这样的问题   帮帮忙啊