c# 转换 c++ 结构体中的char**

.Net技术 码拜 9年前 (2016-05-13) 2512次浏览
typedef struct struct_DATA_OPEN_SETTINGS
{
	char szUserID[DEFAULT_SIZE];	//用户名
	char szPassword[DEFAULT_SIZE];  //密码
	char** pp;                      //数组
	int  nCount;                    //个数
	pfnOnMsg  pfnMsg;
	pfnOnData pfnData;
}DATA_OPEN_SETTINGS;

上面结构体中的char** pp怎么在C#里面用?

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
        public struct DATA_OPEN_SETTINGS
        {
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 25)]
            public string pszUserID;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 25)]
            public string pszPassword;
            //[MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
            public string[] pp;
            public int nCount;
            public CallbackDelegateMsg callbackMsg;
            public CallbackDelegateData callbackData;
        }

这样写不行。
讨教高手,应该怎么写?

解决方案

100

引用:


这样写不行。
讨教高手,应该怎么写?

不可以。

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct DATA_OPEN_SETTINGS
{
    //...
    public IntPtr pp;    // 用IntPtr来传入char**
    public int nCount;
    //...
    public void 准备数组pp(int 个数, int 最大缓冲长度)
    {
        nCount = 个数;
        pp = Marshal.AllocHGlobal(IntPtr.Size * nCount);
        for(int i = 0; i<nCount; i++)
        {
            IntPtr 缓冲区指针 = Marshal.AllocHGlobal(最大缓冲长度);
            Marshal.WriteIntPtr(pp + (IntPtr.Size), 缓冲区指针);
        }
    }
    public void 销毁数组pp()
    {
        // 要记得销毁...
    }
}

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明c# 转换 c++ 结构体中的char**
喜欢 (0)
[1034331897@qq.com]
分享 (0)