Цитата Сообщение от firefox0013 Посмотреть сообщение
Тогда дело в дллимпорте. Я точно не помню как он пишется 1 раз делал потом на c# свою либу писал для общения по овену. укажите явно [In],[Out] параметры. float value точно было ин аут.

Код:
            [DllImportAttribute("owen_io.dll", EntryPoint = "OpenPort", CallingConvention = CallingConvention.StdCall)]
            public static extern int OpenPort(int n, int speed, int part, int bits, int stop, int vid);

            [DllImportAttribute("owen_io.dll", EntryPoint = "ClosePort", CallingConvention = CallingConvention.StdCall)]
            public static extern int ClosePort();

            [DllImportAttribute("owen_io.dll", CharSet = CharSet.Unicode, EntryPoint = "ReadFloat24", CallingConvention = CallingConvention.StdCall)]
            public static extern float ReadFloat24(int adr, int adr_type, [MarshalAs(UnmanagedType.BStr)] string command,[In] [Out] ref float value, int index);
Точно не помню но делал такое а код уже удалил. Попробуйте вместо Unicode поставить ASCII и тип возвращаемого значения float.
Переписал код дллимпорта как вы сказали. Пришлось чуть-чуть и подредактировать код основной функции так:

Код:
            double result;
            float value = 0;

            result = NativeMethods.OpenPort(2, 8, 0, 1, 0, 1);
            Console.WriteLine(result);

            result = NativeMethods.ReadFloat24(32, 0, "PV", ref value, 0);
            Console.WriteLine(result);
            Console.WriteLine(value);

            result = NativeMethods.ClosePort();
            Console.WriteLine(result);

            Console.ReadLine();
Но всё равно не работает, код ошибки - NaN, т.е. я даже не знаю, что за ошибка. Есть идеи?