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#中应该用什么传

解决方案 »

  1.   

    unsigned char 在C#中应该用System.Byte
      

  2.   

       [StructLayout(LayoutKind.Sequential)]
            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;
            } ;这样看下行不
      

  3.   

    http://www.codeproject.com/KB/cs/unmanaged_memory_pointers.aspx
      

  4.   

    unsigned char *在C#中应该用什么传?   在c#中就是用IntPtr类型啊,我今天上午刚弄的就是这样子过去的,我用的winapi的东东,  你可以参考一下P/Invoke Signature Generator这个,我用这个转换了一下winapi的函数,效果不错。
      
      你可以去看看
        http://blogs.microsoft.co.il/blogs/sasha/archive/2008/01/12/p-invoke-signature-generator.aspx
       或许对你有帮助!
      
      

  5.   

    [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;
    sizeconst is
     指示固定长度数组中的元素数,或要导入的字符串中的字符(不是字节)数。 
      

  6.   

    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 = 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;
    }