此动态链接库 的接口描述如下
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指针,要加强此类知识 还烦请推荐点资料  谢谢

解决方案 »

  1.   

    添加dll引用
    写个类继承接口public int hwdev_exe (char * pDevinfobuff,unsigned long nDevinfolen, 
                  char * pSendBuff, unsigned long nSendLen, 
                  char ** pRecbuff, unsigned long pRecvlen, 
                  FunctotaldoneTp pFunctotalDone)
    {
    //这里实现方法   
    }
      

  2.   

    楼上的都说什么呢?人家楼主是要调用C/C++的dll库中的函数。
      

  3.   

    pDevinfobuff为指向设备信息的指针
    --string,StringBuilder,byte*或者byte[]
                  nDevinfolen为存放设备信息缓冲区 的长度
    --uint
                  pSendBuff 为发送缓冲区首指针,来存放符合规则的命令、参数 、数据
    --string,StringBuilder,byte*或者byte[]
                  nSendLen 为发送缓冲区的长度
    --uint
                  pRecbuff 为接受缓冲区首指针,来存放各种命令的执行结果
    --byte**,看看文档吧,得知道它返回来的是什么样的数据
                  pRecvlen 为接受缓冲区的长度
    --你的定义是unsigned long pRecvlen,为什么没有*呢,怀疑,没有*的话,也没法用来做返回值啊。
                  pFunctotalDone  为回调函数指针,用于向调用着反馈执行进度 
    --delegate
      

  4.   

    [DllImport("动态链接库名", EntryPoint = "入口函数", CharSet = CharSet.Unicode)] 
    public extern static 入口函数名(参数列表)
    {
    }
      

  5.   

    外部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 
      

  6.   

    的确是忘记写*了啊 。。 您太厉害了
    再问一下  最后的参数类型是函数指针,在c#中要用delegate来委托这个函数是么函数如下
    FunctotaldoneTp 类型定义如下 typedef int (CALLBACK Functotaldonetp)(unsigned long total,unsigned  long nDone) 请问这个委托该怎么写呢  麻烦各位了  谢谢
      

  7.   

    public delegate int Functotaldonetp(int total,int nDone);
      

  8.   

    int FunctotaldonetpMethod(int total,int nDone)
    {
    ......
    }Functotaldonetp d = new Functotaldonetp(FunctotaldonetpMethod);
    ....hwdev_exe(........,d);