beckapi
BeckLikeCoding
采纳率0%
2016-01-07 15:50 阅读 3.0k

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条回答 默认 最新

  • caozhy 从今以后生命中的每一秒都属于我爱的人 2016-01-07 15:55

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

    点赞 1 评论 复制链接分享
  • qq385105501 战斗强 2018-08-31 05:32

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

    点赞 评论 复制链接分享

相关推荐