此动态链接库 的接口描述如下
int hwdev_exe (char * pDevinfobuff,unsigned long nDevinfolen,
char * pSendBuff, unsigned long nSendLen,
char ** pRecbuff, unsigned long pRecvlen,
FunctotaldoneTp pFunctotalDone)说明如下 pDevinfobuff为指向设备信息的指针
nDevinfolen为存放设备信息缓冲区 的长度
pSendBuff 为发送缓冲区首指针,来存放符合规则的命令、参数 、数据
nSendLen 为发送缓冲区的长度
pRecbuff 为接受缓冲区首指针,来存放各种命令的执行结果
pRecvlen 为接受缓冲区的长度
pFunctotalDone 为回调函数指针,用于向调用着反馈执行进度 其中FunctotaldoneTp 类型定义如下 typedef int (CALLBACK Functotaldonetp)(unsigned long total,unsigned long nDone)请各位前辈传授一下再C#中调用此接口的方法,最好能写个调用此接口的大概的实例代码,或者给个调用接口的参考书之类的资料 万分谢谢ps.此接口用的c指针,要加强此类知识 还烦请推荐点资料 谢谢
int hwdev_exe (char * pDevinfobuff,unsigned long nDevinfolen,
char * pSendBuff, unsigned long nSendLen,
char ** pRecbuff, unsigned long pRecvlen,
FunctotaldoneTp pFunctotalDone)说明如下 pDevinfobuff为指向设备信息的指针
nDevinfolen为存放设备信息缓冲区 的长度
pSendBuff 为发送缓冲区首指针,来存放符合规则的命令、参数 、数据
nSendLen 为发送缓冲区的长度
pRecbuff 为接受缓冲区首指针,来存放各种命令的执行结果
pRecvlen 为接受缓冲区的长度
pFunctotalDone 为回调函数指针,用于向调用着反馈执行进度 其中FunctotaldoneTp 类型定义如下 typedef int (CALLBACK Functotaldonetp)(unsigned long total,unsigned long nDone)请各位前辈传授一下再C#中调用此接口的方法,最好能写个调用此接口的大概的实例代码,或者给个调用接口的参考书之类的资料 万分谢谢ps.此接口用的c指针,要加强此类知识 还烦请推荐点资料 谢谢
解决方案 »
- C#主窗口中子窗口的关闭与打开
- 求助进来看下。。在线等
- 动态加载程序集,反射类型,邪门了,同样的代码在量个程序里得到不同结果。
- 使用aspx页面中的excel组件
- C#中调用C生成的Dll 问题
- 用这个题试试程序员大本营的.NET版是不是没有大一些的菜鸟光临???(为什么点击BUTTON3按钮无法读取sql server2000的那个图)???
- C#是否陷入了“死”递归呀?--那位搞明白了
- BeginInvoke最后一个参数没有意义?
- 现在窗体A,A上有一按钮,单击时,new 另外一个窗体,如何使他们在任务栏上只显示一个。
- 请教下,如何使用Assembly.CreateInstance动态创建多个实例啊!
- 路由器之间转发的数据包里有MAC地址吗?
- 静态和动态调用方法,在效率上区别大么
写个类继承接口public int hwdev_exe (char * pDevinfobuff,unsigned long nDevinfolen,
char * pSendBuff, unsigned long nSendLen,
char ** pRecbuff, unsigned long pRecvlen,
FunctotaldoneTp pFunctotalDone)
{
//这里实现方法
}
--string,StringBuilder,byte*或者byte[]
nDevinfolen为存放设备信息缓冲区 的长度
--uint
pSendBuff 为发送缓冲区首指针,来存放符合规则的命令、参数 、数据
--string,StringBuilder,byte*或者byte[]
nSendLen 为发送缓冲区的长度
--uint
pRecbuff 为接受缓冲区首指针,来存放各种命令的执行结果
--byte**,看看文档吧,得知道它返回来的是什么样的数据
pRecvlen 为接受缓冲区的长度
--你的定义是unsigned long pRecvlen,为什么没有*呢,怀疑,没有*的话,也没法用来做返回值啊。
pFunctotalDone 为回调函数指针,用于向调用着反馈执行进度
--delegate
public extern static 入口函数名(参数列表)
{
}
(1)加DLL引用
(2)转化一下类型 (这个DLL类库是用C++写的,下面是转化对照表)
(3)接下来,就当作C#方法使用.
C++ C#
WORD ushort
DWORD uint
UCHAR int/byte 一般用int代替,而如果需要严格对齐的话则应该用bytebyte
UCHAR* string/IntPtr
unsigned char* [MarshalAs(UnmanagedType.LPArray)]byte[]/?(Intptr)
char* string
LPCTSTR string
LPTSTR [MarshalAs(UnmanagedType.LPTStr)] string
long int
ulong uint
Handle IntPtr
HWND IntPtr
void* IntPtr
int int
int* ref int
*int IntPtr
unsigned int uint
COLORREF uint
再问一下 最后的参数类型是函数指针,在c#中要用delegate来委托这个函数是么函数如下
FunctotaldoneTp 类型定义如下 typedef int (CALLBACK Functotaldonetp)(unsigned long total,unsigned long nDone) 请问这个委托该怎么写呢 麻烦各位了 谢谢
{
......
}Functotaldonetp d = new Functotaldonetp(FunctotaldonetpMethod);
....hwdev_exe(........,d);