试图读写受保护的内存

本文关键字:内存 受保护 读写 | 更新日期: 2023-09-27 18:11:16

我正在尝试使用DllImport从c++库调用函数

[DllImport("DLL.dll", CallingConvention = CallingConvention.StdCall)]
private static extern IntPtr XXX(double dtoday, double dexp, double fwd, double[] sList, double[] vList);
c++函数的签名是
std::vector <double> XXX( const double dtoday,
                const double dexp,
                const double fwd,
                const std::vector <double> &sList,
                const std::vector <double> &vList)

我遇到的问题是&sList和&vList在到达c++ (dll)时是空的,我认为这是因为&在函数定义中。

我已经尝试在导入签名中使用[In, Out] ref vList,但没有解决问题。

如果有人有任何想法,我们将不胜感激

谢谢

试图读写受保护的内存

问题在于std::vector <double>的使用。这在p/invoke中是不可能的。c++类不能用作p/invoke参数。

您需要将其转换为良好的老式数组才能取得进展。返回值也需要一些特殊处理。通常的方法是让调用者分配内存,然后由被调用者填充。

如果您有大量这样的函数要调用,那么您可能会发现将它们全部包装在p/invoke友好函数中的负担太令人讨厌了。此时推荐使用c++/CLI。您将能够直接调用c++代码,并使用标准的。net类型公开。net接口。
相关文章: