Вызов функции из DLL (C++) с передачей указателя на массив - C#

Узнай цену своей работы

Формулировка задачи:

Добрый день! Проблема следующая: нужно вызвать функцию из DLL (написана на c++). При этом в качестве параметров передаются указатели на массив и строку. DLL должна записать в этот массив данные, но программа "падает", помогите, пожалуйста, решить проблему. вот так выглядит функция:
         ext_def( int32 ) swe_calc(
        double tjd, int ipl, int32 iflag, 
        double *xx,
        char *serr);
xx - массив из 6-и элементов double serr - строка мой код на C#:
 
...
[DllImport("swedll32.dll", CallingConvention = CallingConvention.StdCall,
            EntryPoint = "_swe_calc@24")]
        unsafe public static extern int swe_calc(double tjd, int ipl, int iflag, out double[] xx, out string serr);
double d = 0;
...
            unsafe
            {
                string s = "";
                double[] dArray = new double[6];
                Swedll.swe_calc(1, 1, 1, out dArray, out s);
                d = dArray[0];
            }
другие функции из этой DLL вызываются нормально, если они не меняют данные по ссылкам (указателям), а просто возвращают значение. Заранее спасибо! С уважением.

Решение задачи: «Вызов функции из DLL (C++) с передачей указателя на массив»

textual
Листинг программы
 StringBuilder sb = new StringBuilder(255);
            double[] dArray = new double[6];
            Swedll.swe_calc(10.0, 1, 1, dArray, sb);
            
            MessageBox.Show(sb.ToString());

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.1 из 5