请教    如何在C#中    调用dll文件提供的对外接口~~~~一旦解决再追100
此动态链接库 的接口描述如下
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指针,要加强此类知识 还烦请推荐点资料  谢谢
------解决方案--------------------
pDevinfobuff为指向设备信息的指针
--string,StringBuilder,byte*或者byte[]
             nDevinfolen为存放设备信息缓冲区 的长度
--uint
             pSendBuff 为发送缓冲区首指针,来存放符合规则的命令、参数 、数据
--string,StringBuilder,byte*或者byte[]
             nSendLen 为发送缓冲区的长度
--uint
             pRecbuff 为接受缓冲区首指针,来存放各种命令的执行结果
--byte**,看看文档吧,得知道它返回来的是什么样的数据
             pRecvlen 为接受缓冲区的长度
--你的定义是unsigned long pRecvlen,为什么没有*呢,怀疑,没有*的话,也没法用来做返回值啊。
             pFunctotalDone  为回调函数指针,用于向调用着反馈执行进度  
--delegate
------解决方案--------------------
外部DLL使用:
(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
------解决方案--------------------
int FunctotaldonetpMethod(int total,int nDone)
{
......
}
Functotaldonetp d = new Functotaldonetp(FunctotaldonetpMethod);
....
hwdev_exe(........,d);