C#DllImport试图读取或写入受保护的内存 我试图用dLimPurt/P>从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) std::vector XXX(const double dtoday, 常数双dexp, 康斯特双前卫, 常量标准::向量和sList, const std::vector&vList) 我的问题是,当ScListand ValStun到C++(DLL)时,它们是空的,我认为这是因为函数定义中的&。p>
我在导入签名中尝试了C#DllImport试图读取或写入受保护的内存 我试图用dLimPurt/P>从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) std::vector XXX(const double dtoday, 常数双dexp, 康斯特双前卫, 常量标准::向量和sList, const std::vector&vList) 我的问题是,当ScListand ValStun到C++(DLL)时,它们是空的,我认为这是因为函数定义中的&。p>,c#,c++,dllimport,C#,C++,Dllimport,我在导入签名中尝试了[In,Out]ref vList,但没有解决问题 如果有人有任何想法,我们将非常感激 谢谢问题在于使用std::vector。这在p/invoke中是不可能的。C++类不能用作p/Unjk参数。< /P> 您需要将其转换为良好的老式阵列才能取得进展。返回值也需要一些特殊处理。通常的方法是让调用者分配内存,然后被调用者填充内存 如果要调用大量这样的函数,那么您可能会发现将它们全部封装在p/invoke友好函数中的负担太重了。在这种情况下,建议使用C++/CLI。您可以直接调用
[In,Out]ref vList
,但没有解决问题
如果有人有任何想法,我们将非常感激
谢谢问题在于使用
std::vector
。这在p/invoke中是不可能的。C++类不能用作p/Unjk参数。< /P>
您需要将其转换为良好的老式阵列才能取得进展。返回值也需要一些特殊处理。通常的方法是让调用者分配内存,然后被调用者填充内存
如果要调用大量这样的函数,那么您可能会发现将它们全部封装在p/invoke友好函数中的负担太重了。在这种情况下,建议使用C++/CLI。您可以直接调用C++代码,并使用标准.NET类型公开.NET接口。我只需要调用几个函数,所以按照您的建议包装它们不会花费太长时间。如果有用,我会更新