大家好,我用的是VS2010 C#,dll以前没有调过,现在我要调一个c++写的dll,项目是上位机与下位机通信方面的,dll基本上要实现的功能就是:1.我将部分数据传给dll,dll解析并显示数据。2.dll回调我的C#主程序,将dll要发给下位机的命令数据传给C#主程序,C#主程序发给下位机。目前,功能1已经实现,到了功能2,由于搞不懂C#中dll的回调机制是如何实现的,查了好多资料,也没能解决问题,望大家帮忙,先行谢过。最好是带上实例。
我功能1的代码
[DllImport("StaticDll.dll", CharSet = CharSet.Ansi, EntryPoint = "CreateDlgEx", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
public static extern int CreateDlgEx(int na);
[DllImport("StaticDll.dll", CharSet = CharSet.Ansi, EntryPoint = "AcceptDataEx", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
public static extern int AcceptDataEx(byte[] sBuf, int nLen, int nType);现在功能2 想提供一个带有两个参数的 回调函数 参数1 byte[] btData,参数2 int nLen,供DLL调用,请指点
我功能1的代码
[DllImport("StaticDll.dll", CharSet = CharSet.Ansi, EntryPoint = "CreateDlgEx", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
public static extern int CreateDlgEx(int na);
[DllImport("StaticDll.dll", CharSet = CharSet.Ansi, EntryPoint = "AcceptDataEx", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
public static extern int AcceptDataEx(byte[] sBuf, int nLen, int nType);现在功能2 想提供一个带有两个参数的 回调函数 参数1 byte[] btData,参数2 int nLen,供DLL调用,请指点
解决方案 »
- double数组怎么转换为dataset
- 求助如何在vs2008的web中用DataWindow.net2.5
- web form与win form中,请问在insert插入字符串sql语句中,怎么插入 '单引号,不出错?有什么简便的方法吗?
- 求C# 实现在FTP上面下载文件
- webBrowser 如何自动下载文件
- 【你确定要删除吗?】
- 请问如何在c#中调用vc下写的dll库函数?例子:
- 生成静态页面后 如何更新到索引页上的连接?
- GC.Collect()使用次数频繁对系统的影响,谢谢指点。。(不是舍不得给分,只有这30了)
- 送份题,狂简单,只有我不清楚?
- 急!急!急!用过WeifenLuo.WinFormsUI.Docking控件的请进!
- form里有个panel,panle里有个button,请问怎么得到这个button在form里的坐标。
BOOL EnumWindows(WNDENUMPROC lpEnumFunc, LPARAM lParam)
表示此函数需要回调的线索之一是存在 lpEnumFunc 参数。如果参数采用指向回调函数的指针,其名称中通常会有 lp(长指针)前缀与 Func 后缀的组合。有关 Win32 函数的文档,请参见 Microsoft Platform SDK。 创建托管回调函数。该示例声明一个名为 CallBack 的委托类型,此委托类型采用两个参数:hwnd 和 lparam。第一个参数是窗口的句柄;第二个参数由应用程序定义。在此版本中,这两个参数都必须是整数。 回调函数通常会返回非零值来表示成功,返回零来表示失败。本示例将返回值显式设置为 true,以继续进行枚举。 创建一个委托,并将其作为参数传递给 EnumWindows 函数。平台调用会自动将委托转换为常见的回调格式。
public delegate void TXYS_DataArriveHandler_t(ref byte sBuf, int nLen, int nType); TXYS_DataArriveHandler_t dataArrive;
public void fDataArriveHandler(ref byte btData1 , int nLen, int nType)
{
byte [] btData=new byte [nLen];
Marshal.Copy(btData1, btData, 0, nLen);
}这是回调函数声明及定义部分 高手请指点 谢谢
TXYS_RegDataArriveEventHandler(dataArrive);//注册回调函数
上面代码补充 大家请帮忙