c#调用C++dll 返回值为结构体,其中包含string, 报错

c++

 struct ClientInfo
{
    char adress[4];
};

extern "C" __declspec(dllexport) ClientInfo Test()
{
    ClientInfo c;
    strcpy_s(c.adress, "1234");
    return c;
}

c#

   [DllImport("ManagerAPI.dll")]
   public static extern ClientInfo Test();


      [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
    public struct ClientInfo
    {
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst =4)]
        public string address;
    }


             ClientInfo c =Test();
       Console.WriteLine(c.address);

调用的时候老是报
方法类型签名与pinvoke不兼容

c++ 中的char[] 到底对应着c#中的什么类型。 求助

2个回答

strcpy_s(c.adress, "1234");
return c;
这代码有两个问题,一个是你的c是定义在堆栈上的,怎么能用它返回呢?另一个,你的char只有4个元素,是不够复制1234的,还有\0

string需要转换一下,MarshalAs(UnmanagedType.LPStr)]string,参考这个写https://blog.csdn.net/qq385105501/article/details/82253725

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!