C#DllImport尝试读取或写入受保护的内存

时间:2015-09-04 13:25:02

标签: c# c++ dllimport

我试图使用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)

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

我在导入签名中尝试过[In, Out] ref vList,但这并没有解决问题。

如果有人有任何想法,他们会感激不尽

由于

1 个答案:

答案 0 :(得分:0)

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

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

如果你有很多这样的函数要调用,那么你可能会发现将它们全部包装在p / invoke友好函数中的负担太烦人了。在这种情况下,建议使用C ++ / CLI。您将能够直接调用C ++代码,并使用标准.net类型公开.net接口。