Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
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 - Fatal编程技术网 ,c#,c++,dllimport,C#,C++,Dllimport" /> ,c#,c++,dllimport,C#,C++,Dllimport" />

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接口。我只需要调用几个函数,所以按照您的建议包装它们不会花费太长时间。如果有用,我会更新