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);
} 有人遇到过这样的问题吗? 怎么解决的?
回调函数:
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);
} 有人遇到过这样的问题吗? 怎么解决的?
另外,string,长度固定么。组合一些attribute试试吧。
程序运行后 可以看到视频 但是等到 5到10 秒后就出现错误了 "0x10005c8e" 指令引用的"0x000034a0"内存。该内存不能为"written".
就是这样的 然后点击“确定” 程序就退出了 Char * 我转成String 类型的 就放不了视频 还会报错 最后我改成 IntPtr 可以放视频 但也有错
曾经遇到过,初步估计是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;
}
)
你好 你那个时候怎么解决的呢?
还有谁遇到过这样的问题 帮帮忙啊