C# 回调函数
2010-12-28 11:15
337 查看
回调函数是应用程序提供给Windows系统DLL或其它DLL调用的函数,一般用于截获消息、获取系统信息或处理异步事件。应用程序把回调函数的地址指针告诉DLL,而DLL在适当的时候会调用该函数。回调函数必须遵守事先规定好的参数格式和传递方式,否则DLL一调用它就会引起程序或系统的崩溃。通常情况下,回调函数采用标准WindowsAPI的调用方式,即__stdcall,当然,DLL编制者可以自己定义调用方式,但客户程序也必须遵守相同的规定。在__stdcall方式下,函数的参数按从右到左的顺序压入堆栈,除了明确指明是指针或引用外,参数都按值传递,函数返回之前自己负责把参数从堆栈中弹出。
public delegate int pDataRec(int sid, int iusrdata, int idatatype, IntPtr pdata, int ilen);// 定义委托
pDataRec pdataRec = new pDataRec(dataRec);
private static int dataRec(int sid, int iusrdata, int idatatype, IntPtr pdata, int ilen) //回调原型
{
}
m_hSession = HIKS_CreatePlayer((IntPtr)null, (int)pictureBox1.Handle, pdataRec, msgBack, 1);//调用
调用的时候要用pdataRec 否则会出现
对“testPlayer!testPlayer.Form1+pDataRec::Invoke”类型的已垃圾回收委托进行了回调。这可能会导致应用程序崩溃、损坏和数据丢失。向非托管代码传递委托时,托管应用程序必须让这些委托保持活动状态,直到确信不会再次调用它们。
public delegate int pDataRec(int sid, int iusrdata, int idatatype, IntPtr pdata, int ilen);// 定义委托
pDataRec pdataRec = new pDataRec(dataRec);
private static int dataRec(int sid, int iusrdata, int idatatype, IntPtr pdata, int ilen) //回调原型
{
}
m_hSession = HIKS_CreatePlayer((IntPtr)null, (int)pictureBox1.Handle, pdataRec, msgBack, 1);//调用
调用的时候要用pdataRec 否则会出现
对“testPlayer!testPlayer.Form1+pDataRec::Invoke”类型的已垃圾回收委托进行了回调。这可能会导致应用程序崩溃、损坏和数据丢失。向非托管代码传递委托时,托管应用程序必须让这些委托保持活动状态,直到确信不会再次调用它们。
相关文章推荐
- Unity 之 C# 利用回调函数实现C++匿名函数
- C#调用dll,dll中执行C#端的回调函数
- 关于C#中的WEB开发的回调函数的实现
- c#调用c++带有回调函数方法的实现
- c#调用c++回调函数。
- 在C#里面调用带有回调函数和自定义结构体的DLL的例程
- C++调用C#注册的回调函数
- c# 如何调用非托管函数3-实现回调函数
- C++ dll 调用C#传入的回调函数,运行一段时间程序自动出错
- C#调用C++的dll,PInvoke问题和回调函数抛出异常access violation
- 刚遇到的一个C#中调用api,回调函数的问题
- C#下Socket对象的BeginReceive方法,执行后竟然不调用AsyncCallback里的回调函数
- C#中用委托实现C++的回调函数
- c#调用c++的回调函数
- C#中用委托实现C++的回调函数
- 关于C#中调用C++dll传递回调函数的问题
- C# 调用C++回调函数
- C# (事件触发)回调函数,完美处理各类疑难杂症!
- C# 调用C/C++回调函数
- C#中的多线程使用 -- Thread 类: 使用回调函数从一个线程中检索数据