c++ - 将 DLL 调用到 VB.Net 中时出现未处理的 AccessViolationException 错误

标签 c++ vb.net dll access-violation

我正在尝试从 VB.net 调用 C++ 编译的 DLL,但遇到了一些问题。似乎有一个明显的解决方案,但我想不出来。

这是 C++ 中的函数声明:

 MyFunction(int trailingaveragesize, double sigmasize, int myflag, int sizeSeries, double *Xdata, double *Ydata, int sizeinputparameter, int *averagePairs, double *PositionsSize, double *PnLSize)

这是我在 VB.Net 中的调用方式:

 Call MyFunction(200, 1, 1, 230, a_PriceSeries(0), a_PriceSeries(0), 1, a_Averages(0), a_PositionSeries(0), a_PnLs(0))

输入矩阵的最大大小由 sizeSeries (230) 定义,我所有输入矩阵的大小都是 10000(这样我就不会不小心溢出),但我仍然遇到未处理的 AccessViolationException 错误

 Attempted to read or write protected memory. This is often an indication that other memory is corrupt.

我的问题是 - 如果我没有超出矩阵的界限,还有什么其他原因会引发此错误?是因为我只传递矩阵中的第一个条目 ByReference 然后它试图访问该矩阵的其他元素吗?如果是这样,我该如何解决?

编辑:

这是我在 VB 中声明它的方式

 Declare Function MyFunction Lib "C:\Dev\asdf.dll" (ByVal trailingaveragesize As Long, ByVal sigmasize As Double, ByVal myflag As Long, ByVal sizeSeries As Long, ByRef Xdata As Double, ByRef Ydata As Double, ByVal sizeinputparameter As Long, ByRef averagePairs As Long, ByRef PositionsSize As Double, ByRef PnLSize As Double) As Double

最佳答案

Declare Function MyFunction Lib "C:\Dev\asdf.dll" (ByVal trailingaveragesize As Long, _
  ByVal sigmasize As Double, ByVal myflag As Long, ByVal sizeSeries As Long, 
  ByRef Xdata As Double, ByRef Ydata As Double, ByVal sizeinputparameter As Long, 
  ByRef averagePairs As Long, ByRef PositionsSize As Double, ByRef PnLSize As Double) As Double

声明完全错误,这类似于 vb6 声明。 C 代码中的 int 是 vb.net 中的 Integer,而不是 Long。 Xdata 和 Ydata 很可能是数组,而不是 byref double。将它们声明为 ByVal Double()。其他 byref args 更难猜测。

关于c++ - 将 DLL 调用到 VB.Net 中时出现未处理的 AccessViolationException 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7675298/

相关文章:

从 jar 文件夹加载 Java rxtxSerial.dll

C++:提升文件系统以返回早于特定时间的文件列表

C++ 程序以代码 0 错误退出

c++ - C++ 项目中的第三方 C 文件的 CMakeLists.txt

C++ 检测输入是 Int 还是 String

sql-server - 触发器与存储过程

.net - LINQ to XML 中的 InvalidCastExeption

SQL 和 VB.NET : SELECT query using data in textbox

c# - (UserControl with SQLite) ---> 无法创建组件 'UserControl1',System.DllNotFound Excpetion,无法加载 Sqlite.interop.dll

c++ - 找不到 libpng14-14.dll