Сообщение от
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, т.е. я даже не знаю, что за ошибка. Есть идеи?