在C#中定义结构体
//解析的结构体
[StructLayout(LayoutKind.Sequential)]
public struct license_output_data_t
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 100)]
public byte[] OnlyCode;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 50)]
public byte[] LicenceName;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 100)]
public byte[] AddrName;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 50)]
public byte[] SerialNum;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 60)]
public byte[] EquipmentType;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 60)]
public byte[] SoftName ;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)]
public byte[] SoftVersion ;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 60)]
public byte[] CompanyName ;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
public byte[] Email ;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
public byte[] Phone ;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 50)]
public byte[] CompanyPerson ;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)]
public byte[] Effective ;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)]
public byte[] DateTimeField ;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)]
public byte[] VersionType ;
}
引用DLL
[DllImport("licdecode.dll",EntryPoint = "get_license_file_info", CallingConvention = CallingConvention.StdCall)]
public unsafe static extern int get_license_file_info(out license_output_data_t license_data);
调用成功 转换为UTF-8
Encoding.UTF8.GetString(license_data.SoftVersion)
调用
int z = get_license_file_info(out license_data);
突然记起来需要写个记录,不然以后遇到这类似的问题,又焦头烂额的,当时想的一些问题都忘记的差不多了,以后要养成随时写记录的习惯