编组C ++ char []成员导致空字符串

时间:2017-07-07 22:10:12

标签: c# c++ marshalling

我试图将包含char []数组的C ++结构封送到C#但是在非托管端我看到char数组为空并且不确定我缺少什么

C#结构

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1), Serializable]
public struct MParams
{
   public int action;
   public int response;
   public long serial_no;
   [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 251)]
    public string address;  // public char[] address;
   [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 81)]
   public string description; // public char[] description;
}

C ++结构

typedef struct
{
  int                           action;
  int                           response;
  LONG                          serial_no;
  char                          address[251];
  char                          description[81];
}PARAMS;

C ++导出函数

__declspec(dllexport) (int) test_Email(void *params)
{
   PARAMS *l_params = (PARAMS *)params;
   // params->address // always empty expected abc@abc.com
}

C#用法

[DllImport(@"test.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint ="?test_Email@@YAHPAX@Z")]
public  static extern int EMailExists(IntPtr valParams);

MParams mParams = new MParams {
            action = 3,
            serial_no = 0,
            address = abc@abc.com,
            description = string.Empty
        };

IntPtr pAddr = Marshal.AllocHGlobal(Marshal.SizeOf(mParams));
Marshal.StructureToPtr(mParams, pAddr, false);
EMailExists(pAddr);
mParams = (MParams)Marshal.PtrToStructure(pAddr, typeof(MParams));

我试图使用char []来编组,但这也没有用。我认为我错过了一些非常明显的事情,并且有助于理解我错在哪里。

0 个答案:

没有答案