使用DLL编写C#程序,在DLL中有一结构,其中包含byte*变量,该变量存储字符串,图片或结构等信息,请问在C#中如何得到正确的信息。主要代码如下:
[StructLayout(LayoutKind.Sequential)]
public struct LPRKERNEL
{
public byte type; //数据类型
public int dwDeviceId; //设备号码
public int dwSerialNo; //识别序列号
//[MarshalAs(UnmanagedType.LPStr)] public string pData; 数据----字符串正确
unsafe public byte* pData; //数据
public int cbData; //数据长度
public int lParam; //数据类型相关数据
public bool bError; //是否校验错误
}
public LPRKERNEL lprkernel = new LPRKERNEL();
Type mytype = lprkernel.GetType();
lprkernel =(LPRKERNEL)m.GetLParam(mytype);
可以得到lprkernel.pData(byte*类型),但如何转换为string,或图片,或结构?
[StructLayout(LayoutKind.Sequential)]
public struct LPRKERNEL
{
public byte type; //数据类型
public int dwDeviceId; //设备号码
public int dwSerialNo; //识别序列号
//[MarshalAs(UnmanagedType.LPStr)] public string pData; 数据----字符串正确
unsafe public byte* pData; //数据
public int cbData; //数据长度
public int lParam; //数据类型相关数据
public bool bError; //是否校验错误
}
public LPRKERNEL lprkernel = new LPRKERNEL();
Type mytype = lprkernel.GetType();
lprkernel =(LPRKERNEL)m.GetLParam(mytype);
可以得到lprkernel.pData(byte*类型),但如何转换为string,或图片,或结构?
解决方案 »
- vs2005中sql serveexpress无法启动
- C#窗体程序,使用SQL SERVER 2005数据库,定义了存储过程的输出参数,怎么以结果集的方式返回?在线求解。
- 请问如何使用C#在自己程序里打开PPT或者word文件
- 帮忙看看CS模式下的服务器端疑难问题
- 用C#怎么实现打开文件夹??
- 请问从SQL2000 建的数据库附加到2005后关系视图打不开.
- C#修复文件
- 关于C# 导出word文档问题?请求帮助。。。
- 寻个时间判断的思路:
- 请问我如何判断当前用户是否具有管理员的权限(是否属于administrotors组)?
- 求一函数
- BindgingNavigator 如何控件DataGridVIew?
public byte[] pData;byte[] 根据数据格式转换为string,或图片,或结构
未处理的“System.TypeLoadException”类型的异常出现在 mscorlib.dll 中。
其他信息: 无法封送类型 LPRKERNEL 的字段 pData:该类型无法作为结构字段进行封送处理。
这里应该是MemoryCopy,你得到指针之后,还要知道Memory的长度,否则没有用。public int cbData; //数据长度
这个字段应该是定义长度的,但是感觉不太对,通常传递的时候应该用ref cbData
检查cbData看否得到了正确的内存的长度
不知有没有更简单的
{ byte * p2 = p
for(int i = 0;i < cbData;++i)
{
// get the charater
char c = (char) (*p2++);
// your operation
}
}