调用dll控件 其中的pData 是一个表中的数据 怎么将表中的数据传给pData, 帮忙写个简单的函数给我!
万分感谢 - -!
public static extern int OperateUser(string DeviceIP, int CommandID, ref int pData, int sizepdata)
万分感谢 - -!
public static extern int OperateUser(string DeviceIP, int CommandID, ref int pData, int sizepdata)
解决方案 »
- 请问大虾们,这怎么解决,说未将对象引用到引用到实例
- winform下如何设置webbrowser的cookie过期?
- TextBox和comboBox中用什么方法判断用户输入的是英文字母
- 求C#进程间通信方法
- 使用Enterprise Library 2006来连接oracle数据库,总是出错.请教正确写法.解决了立马给分.
- net与java哪个对内存要求高呀?
- 图像处理指针调用怎么出现问题?
- 如何实现全屏,画面不抖动?
- 关于计算器连加中的一个问题
- 在制作安装程序时(.net自带的),如何取得所选安装目录的路径.
- fullscreen=1,本地全屏没问题,发布到服务器上后,访问时有标题栏和地址栏。在线等◎◎◎◎
- sql in 报错 求解?
int i=OperateUser("192.168.2.69",236, ref 2313, 1231313);
此函数实现的是对数据库的人员表进行操作
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?
这个函数有四个参数,你所疑惑的估计是ref int pData,在int加上修饰符ref,表示这个参数是按引用传递的,这个概念是和值传递想对的(传值和传址)。另外还有一个特点,就是使用ref后,必须在调用这个函数前对该参数进行初始化。
所以:
int ipdata=0;
int i=OperateUser("192.168.1.2",404, ref ipdata, 1024);里面的参数都仅供参考,具体的你自己来定
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);