c#部分:结构声明:
[StructLayout(LayoutKind.Explicit, Size=96, CharSet=CharSet.Ansi)]
public struct HHNews_Head
{
[FieldOffset(0)]public string re;
[FieldOffset(48)]public string code;
[FieldOffset(64)]public long tsflag;
[FieldOffset(80)]public short items;
[FieldOffset(82)]public short itemsize;
[FieldOffset(84)]public int date;
[FieldOffset(88)]public int time;
[FieldOffset(92)]public int offset;
};调dll:
[DllImport("HQstruct.dll", EntryPoint="getNews_HeadStruct",CharSet=CharSet.Ansi,CallingConvention=CallingConvention.StdCall)]
public static extern int getNews_HeadStruct(string FileName, ref HHNews_Head pGetInfo);调用c中的函数:
HHNews_Head head = new HHNews_Head();
int n = getNews_HeadStruct("c:\\news.hni", ref head);
// head得到的值不对,只有head.re有值,其余为0c的dll中结构定义及函数声明
struct HHNews_Head
{
char re[48];
char code[16];
long tsflag[4];
short items;
short itemsize;
long date;
long time;
int offset;
};extern "C" int __declspec(dllexport)getNews_HeadStruct(CString FileName, HHNews_Head ** pGetInfo);
[StructLayout(LayoutKind.Explicit, Size=96, CharSet=CharSet.Ansi)]
public struct HHNews_Head
{
[FieldOffset(0)]public string re;
[FieldOffset(48)]public string code;
[FieldOffset(64)]public long tsflag;
[FieldOffset(80)]public short items;
[FieldOffset(82)]public short itemsize;
[FieldOffset(84)]public int date;
[FieldOffset(88)]public int time;
[FieldOffset(92)]public int offset;
};调dll:
[DllImport("HQstruct.dll", EntryPoint="getNews_HeadStruct",CharSet=CharSet.Ansi,CallingConvention=CallingConvention.StdCall)]
public static extern int getNews_HeadStruct(string FileName, ref HHNews_Head pGetInfo);调用c中的函数:
HHNews_Head head = new HHNews_Head();
int n = getNews_HeadStruct("c:\\news.hni", ref head);
// head得到的值不对,只有head.re有值,其余为0c的dll中结构定义及函数声明
struct HHNews_Head
{
char re[48];
char code[16];
long tsflag[4];
short items;
short itemsize;
long date;
long time;
int offset;
};extern "C" int __declspec(dllexport)getNews_HeadStruct(CString FileName, HHNews_Head ** pGetInfo);
public struct HHNews_Head
{
[FieldOffset(0)]public byte[] re;
[FieldOffset(48)]public byte[] code;
[FieldOffset(64)]public long tsflag;
[FieldOffset(80)]public short items;
[FieldOffset(82)]public short itemsize;
[FieldOffset(84)]public int date;
[FieldOffset(88)]public int time;
[FieldOffset(92)]public int offset;
};
c中的数据和c#中数据字长不等造成的,请高手解惑,急用。
必须使用IntPtr指针做返回值,然后用Marshal.PtrToStructure读取结构内容。代码如下:声明:
public static extern int getNews_HeadStruct(string FileName, IntPtr pData);
使用:
HHNews_Head pGetInfo=new HHNews_Head();
IntPtr ptr=IntPtr.Zero;
int n = getNews_HeadStruct("c:\\news.hni", ptr);
Marshal.PtrToStructure(ptr,pGetInfo);