C# DllImport 尝试读取或写入受保护的内存
C# DllImport Attempted to read or write protected memory
我正在尝试使用 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 参数。
您需要将其转换为良好的老式数组才能取得进展。 return 值也需要一些特殊处理。通常的做法是让调用者分配内存,然后被调用者填充它。
如果您要调用大量此类函数,那么您可能会发现将它们全部包装在 p/invoke 友好函数中的负担太累人了。在这种情况下,建议使用 C++/CLI。您将能够直接调用 C++ 代码,并使用标准 .net 类型公开 .net 接口。
我正在尝试使用 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 参数。
您需要将其转换为良好的老式数组才能取得进展。 return 值也需要一些特殊处理。通常的做法是让调用者分配内存,然后被调用者填充它。
如果您要调用大量此类函数,那么您可能会发现将它们全部包装在 p/invoke 友好函数中的负担太累人了。在这种情况下,建议使用 C++/CLI。您将能够直接调用 C++ 代码,并使用标准 .net 类型公开 .net 接口。