struct PROG_INFO
{
int nProgID;
int nSize;
int nUpLoadSize;
int nServiceID;
int nFileCount;
int nState;
int nSpeed;
int nCostTime;
LPSTR szName;
PROG_INFO()
{
nProgID = 0;
nSize = 0;
nUpLoadSize = 0;
nServiceID = 0;
nFileCount = 0;
nState = 0;
nSpeed = 0;
nCostTime =0;
szName = NULL;
}
};我转成了:
        public class PROG_INFO
        {
            public int nProgID;
            public int nSize;
            public int nUpLoadSize;
            public int nServiceID;
            public int nFileCount;
            public int nState;
            public int nSpeed;
            public int nCostTime;
            public string szName;
            public PROG_INFO(IntPtr wParam)
            {
                nProgID = 0;
                nSize = 0;
                nUpLoadSize = 0;
                nServiceID = 0;
                nFileCount = 0;
                nState = 0;
                nSpeed = 0;
                nCostTime = 0;
                szName = null;
            }
        }
这样有问题么?请各位帮忙看看谢了
structc#c++

解决方案 »

  1.   

    public PROG_INFO(IntPtr wParam
    这个是什么意思,好像不需要这个参数把?
      

  2.   

    只要LPSTR 换成string就可以了
      

  3.   

     public struct PROG_INFO
        {
            public int nProgID;
            public int nSize;
            public int nUpLoadSize;
            public int nServiceID;
            public int nFileCount;
            public int nState;
            public int nSpeed;
            public int nCostTime;        [System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.LPStr)]
            public string szName;        public PROG_INFO(IntPtr wParam)
            {
                nProgID = 0;
                nSize = 0;
                nUpLoadSize = 0;
                nServiceID = 0;
                nFileCount = 0;
                nState = 0;
                nSpeed = 0;
                nCostTime = 0;
                szName = null;
            }
        };
      

  4.   

    如果你想保证它们二进制兼容,请使用StructLayout特性,http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.structlayoutattribute.aspx。
      

  5.   

    我现在改成了:       public struct PROG_INFO
            {
                public int nProgID;
                public int nSize;
                public int nUpLoadSize;
                public int nServiceID;
                public int nFileCount;
                public int nState;
                public int nSpeed;
                public int nCostTime;
                public string szName;
                //public PROG_INFO(IntPtr wParam)
                PROG_INFO()
                {
                    nProgID = 0;
                    nSize = 0;
                    nUpLoadSize = 0;
                    nServiceID = 0;
                    nFileCount = 0;
                    nState = 0;
                    nSpeed = 0;
                    nCostTime = 0;
                    szName = null;
                }
            }
    但会出错的:错误 1 结构不能包含显式的无参数构造函数
      

  6.   

    [code]
    public struct PROG_INFO
    {
    public int nProgID;
    public int nSize;
    ……
    PROG_INFO()
    {
    nProgID = 0;
    nSize = 0;
    nUpLoadSize = 0;
    nServiceID = 0;
    nFileCount = 0;
    nState = 0;
    nSpeed = 0;
    nCostTime =0;
    szName = NULL;
    }
    }
    [/code]
      

  7.   

      [StructLayout(LayoutKind.Sequential)]
    public struct PROG_INFO
        {
            public int nProgID;
            public PROG_INFO(IntPtr wParam)
            {
                nProgID = 5;
            }
        }调用PROG_INFO info = new PROG_INFO((IntPtr)0);
      

  8.   

    其实看这个结构构造函数里的代码,转成C# struct,根本不必定义构造函数,直接下面这样定义就可以了,默认struct里的int字段为0,string字段为null的,不需要单独在定义构造函数给各字段赋值。
    另外说明struct不能定义默认无参数的构造函数,只有class可以定义默认无参数的构造函数 public struct PROG_INFO
        {
            public int nProgID;
            public int nSize;
            public int nUpLoadSize;
            public int nServiceID;
            public int nFileCount;
            public int nState;
            public int nSpeed;
            public int nCostTime;        //对应c++的LPStr类型
            [System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.LPStr)]
            public string szName;      
        };
      

  9.   

    下面两种调用都可以,p1和p2的各个int型字段都是0,szName为null PROG_INFO p1 = new PROG_INFO();
     PROG_INFO p2;