Я пытаюсь вызвать C ++ - скомпилированную DLL из VB.net, и у меня возникают некоторые проблемы. Кажется, что есть очевидное решение, но я не могу понять это.
Вот объявление функции в 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, а затем пытаюсь получить доступ к другим элементам этой матрицы? Если это так, как бы я это исправить?
EDIT:
Вот как я это объявляю в 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