调用dll控件   其中的pData 是一个表中的数据 怎么将表中的数据传给pData, 帮忙写个简单的函数给我!
万分感谢 - -!
 public  static extern int OperateUser(string DeviceIP, int CommandID, ref int pData, int sizepdata)

解决方案 »

  1.   

    调用dll: int result=OperateUser("", 0, ref 表中的数据, 表中的数据大小);
      

  2.   

    int ipdata=0;
    int i=OperateUser("192.168.2.69",236, ref 2313, 1231313);
      

  3.   

    楼主,根据你上个帖子,我大致知道你想问的东西,这样,你把OperateUser在C++里是如何定义的,那个结构体又是什么,都贴出来,我会完整帮你解答。
      

  4.   

    C#中ref和out的作用和区别
      

  5.   

    word上有这样的说明:  long OperateUser(LPCTSTR DeviceIP, long CommandID, long * pData, long DataSize);
     此函数实现的是对数据库的人员表进行操作
     DeviceIP是CVS终端的IP地址。
     CommandID是数据库操作命令。(1为增加,2为修改,3为删除)
     pData是人员表结构体的指针
    typedef struct _MSG_BODY_USER
    {
       char szStuID[DATABASE_USER_SECTION_LEN];
       char szStuCard[DATABASE_USER_SECTION_LEN];
       char szStuName[DATABASE_USER_SECTION_LEN];
       char szStuClass[DATABASE_USER_SECTION_LEN];
       char szStuPhoto[DATABASE_USER_SECTION_LEN];
       char szParentName[DATABASE_USER_SECTION_LEN];
       char szParentPhoto[DATABASE_USER_SECTION_LEN];
       char szPhoneNumber[DATABASE_USER_SECTION_LEN];
       char szTelePhone[DATABASE_USER_SECTION_LEN];
       char szOldCard[DATABASE_USER_SECTION_LEN];
       char szWorkNo[DATABASE_USER_SECTION_LEN];
       char szIDcard[DATABASE_USER_SECTION_LEN];
       int Sex;
    }MSG_BODY_USER, *PMSG_BODY_USER;
     DataSize是人员表结构体的长度求解答 - - ! 怎么将表中的数据传给 pData?
      

  6.   

    int result=OperateUser("", 0, ref 1, 1);
      

  7.   

    public static extern int OperateUser(string DeviceIP, int CommandID, ref int pData, int sizepdata)
    这个函数有四个参数,你所疑惑的估计是ref int pData,在int加上修饰符ref,表示这个参数是按引用传递的,这个概念是和值传递想对的(传值和传址)。另外还有一个特点,就是使用ref后,必须在调用这个函数前对该参数进行初始化。
    所以:
    int ipdata=0;
    int i=OperateUser("192.168.1.2",404, ref ipdata, 1024);里面的参数都仅供参考,具体的你自己来定
      

  8.   

    看见上面我贴出来的那个表了没!  那个表我要给里面的变量赋值 并传到pData中去 上面是用c++写的  简单的选两个变量 帮我写个用c#实现的简单过程 可以吗?就是 这个不会  。 
      

  9.   

    完整解决:
    1、结构体:
    [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
    public struct MSG_BODY_USER
    {
      [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]  //这里改为DATABASE_USER_SECTION_LEN宏定义实际大小
      public string szStuID;
      [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]
      public string szStuCard;
      [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]
      public string szStuName;
      [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]
      public string szStuClass;
      [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]
      public string szStuPhoto;
      [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]
      public string szParentName;
      [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]
      public string szParentPhoto;
      [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]
      public string szPhoneNumber;
      [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]
      public string szTelePhone;
      [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]
      public string szOldCard;
      [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]
      public string szWorkNo;
      [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]
      public string szIDcard;
      public int Sex;
    }2、函数声明:使用IntPtr
    public static extern int OperateUser(string DeviceIP, int CommandID, IntPtr pData, int sizepdata)3、C#使用:MSG_BODY_USER user=new MSG_BODY_USER();
      ............//成员赋值,你自己来写。
    int size = Marshal.SizeOf(user);
    IntPtr structPtr = Marshal.AllocHGlobal(size);
    Marshal.StructureToPtr(user, structPtr, false);
    int ret=OperateUser("aaa",1,structPtr,size);