Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.01.2012, 12:38   #1
atagilov
Пользователь
 
Регистрация: 22.06.2011
Сообщений: 11
Восклицание Передача массива в Delphi

Доброе время суток! Возникла необходимость передать массив структур из C# в Delphi DLL. Все успешно передается, но плюс к нужным данным передаются дополнительные строки в массиве..

Вызов процедуры в DLL Delphi:

Код:
      TypeRowIn = record
                          a : TDateTime;
                          b : TDateTime;

                          v : real;
                          vv : real;
                          vvv : real;
                          vvvv : real;
                        end;

    TypeRowsIn = array of TypeRowIn;

procedure cl_Calc(inRows : TypeRowsIn); stdcall;
var test1 : real;
begin
 test1 := (inRows [0].v + inRows [0].vv+ inRows [0].vvv+ inRows [0].vvvv)/4;
end;
вызов в C#:

Код:
[StructLayout(LayoutKind.Sequential, Pack = 1)]
        public struct Row
        {
            public DateTime a;
            public DateTime b;
            
            public double v; 
            public double vv; 
            public double vvv; 
            public double vvvv;
        }
        
        [DllImport(@"Ind.dll", EntryPoint = "cl_Calc", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)]
        static public extern void Calc(Row[] inRows);

...

static void Main(string[] args)
        {
            int count = 2;
            Row[] Rows = new Row[count];

            Rows [0].a = new DateTime(2012, 01, 29);
            Rows [0].b= new DateTime(2012, 01, 29, 14, 00, 00);
            Rows [0].v= 0.25658;
            Rows [0].vv= 9.55678452;
            Rows [0].vvv = 2.3455658;
            Rows [0].vvvv= 6.243458;

            Rows [1].a = new DateTime(2012, 01, 29);
            Rows [1].b= new DateTime(2012, 01, 29, 15, 00, 00);
            Rows [1].v = 1.25658;
            Rows [1].vv= 5.95758;
            Rows [1].vvv= 2.95688;
            Rows [1].vvvv= 2.85958;

            Calc(Rows);

            Console.ReadLine();
        }
В итоге первые две строки массива передаются верно, но вместе с ними еще передается более 100 000 строк в массиве)) как сделать, чтобы передались только эти две строки? Заранее спасибо!
atagilov вне форума Ответить с цитированием
Старый 30.01.2012, 15:42   #2
arch_rch
Новичок
Джуниор
 
Регистрация: 30.01.2012
Сообщений: 1
По умолчанию

В твоем примере передается не массив, а указатель на этот массив. Для корректной работы необходимо указывать длину массива, например передавая количество строк в качестве аргумента функции Calc.
arch_rch вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Произведение элементов массива в функции (передача массива в функцию) (Delphi) Toxa16 Помощь студентам 1 23.04.2011 04:42
Передача массива в функцию GladiatoR24 Общие вопросы C/C++ 3 24.11.2010 22:51
Передача массива в функуцию tae1980 Microsoft Office Excel 5 23.11.2010 19:08
Передача массива в функцию D[I]K Общие вопросы C/C++ 4 13.09.2009 21:31
Передача массива по указателю liver1981 Общие вопросы C/C++ 3 21.04.2009 17:07