C#那边的声明和使用应该没什么问题,我觉得问题出在C++这边,参数类型不应该为string类型,C#的String对应C++中的宽字符串也就是wchar_t *,应该是这样:
SaveExpectResult(wchar_t *xmlid, wchar_t *result)
然后函数内部你需要用std::string的话,在把宽字符串转为string(wcstombs这个函数可以把宽字符串转为单字节字符串)就可以了。
两边string不是同一个类型,不能通用。
C#无法正确使用C++的string类型。
C++那边应该改为const char*或者const wchar_t*
如果用前者,C#那边CharSet要改为ANSI
托管代码调用非托管时加上这句:
[StructLayout(LayoutKind.Sequential,Pack=1)]
另外你要使用句柄平台的特定类型IntPtr来接受它回返的值,用上下文可知它返回的是一个double型的指针值的函数。