struct data_element_flag {
short bitf;
short len;
int dbuf_addr;
};struct ISO_data{
struct data_element_flag f[128];
short off;
char dbuf[512];
char message_id[10];
} ;
long DllExport setbit ( ISO_data * iso , int n , unsigned char *str , int len );public struct data_element_flag
{
public short bitf;
public short len;
public int dbuf_addr;
};
[StructLayout(LayoutKind.Sequential)]
public struct ISO_data
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 1280)]
public data_element_flag[] f;
public short off;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 5120)]
public string dbuf;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)]
public string message_id;
} ;[DllImport("PCComm.dll", EntryPoint = "setbit")]
public static extern int setbit(ref ISO_data iso, int n, IntPtr str, int len);ISO_data iso = new ISO_data();
System.IntPtr ptr = new IntPtr();
ptr = Marshal.StringToHGlobalAnsi("123456789");
setbit(ref iso, 2, ptr, 12);
这是我的方法
可是用IntPtr传值进去,C++里获取的值一直在变
不知道是不是我IntPtr用的不对
还是不用这个传值,如果不用unsigned char *在C#中应该用什么传
public struct ISO_data
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 1024)]
public data_element_flag[] f;
public short off;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 512)]
public byte[] dbuf;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)]
public byte[] message_id;
} ;这样看下行不
你可以去看看
http://blogs.microsoft.co.il/blogs/sasha/archive/2008/01/12/p-invoke-signature-generator.aspx
或许对你有帮助!
public data_element_flag[] f;
public short off;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 5120)]
public string dbuf;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)]
public string message_id;
sizeconst is
指示固定长度数组中的元素数,或要导入的字符串中的字符(不是字节)数。
{
public short bitf;
public short len;
public int dbuf_addr;
}
[StructLayout(LayoutKind.Sequential)]
public struct ISO_data
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)]
public data_element_flag[] f;
public short off;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 512)]
public string dbuf;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)]
public string message_id;
}