解决方案 »

  1.   

    第一感觉肯定也是你那样写,如果报错了,很可能是char* metDetail[]  是一个char类型的指针数组,所以用IntPtr[]应该可以
    然后用Marsharl.PtrToString()取值不过,也可以试试
    [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.LPStr)] string[] arrMetDetail, 
      

  2.   

    extern "C" __declspec(dllexport) void CalIsolatedSpan(char const *guideWire, char const *splitNumber, char const *isoSpan, char const *metDetail[], int nCount, char const * &result) [DllImport(dllPath, EntryPoint = "CalIsolatedSpan", CallingConvention = CallingConvention.Cdecl)]
    private static extern UInt32 CalIsolatedSpan_([In, MarshalAs(UnmanagedType.LPStr)]string isoSpan, [In, MarshalAs(UnmanagedType.LPStr)]string guideWire, [In, MarshalAs(UnmanagedType.LPStr)]string splitNumber, [In, MarshalAs(UnmanagedType.LPArray, ArraySubType=UnmanagedType.LPStr)]string[] arrMetDetail, int nCount, [Out, MarshalAs(UnmanagedType.LPStr)]out string result);需要注意的是 result 返回值需要在非托管内存分配,此时不可以使用 new 或者 malloc 之类的 C 和 C++ 的分配函数。必须使用系统的分配函数。建议最好使用由 Caller 来分配空间的做法,添加一个参数表示 result 缓冲区的大小,然后再 C# 端使用 StringBuilder。