потому что это указатель.
потому что это указатель.
мой код на С#
Код://Универсальная функция чтения записи [DllImportAttribute("owen_io.dll", EntryPoint = "OwenIO", CallingConvention = CallingConvention.StdCall)] unsafe public static extern int OwenIO(int adr, int adr_type, int is_read, string command, char * dev, ref int params_sz);при чтении "dev" возвращает значения "11576","49856","204","\0" как это расшифровать ?Код:unsafe public static int read_owen_io(int adr, int adr_type, string command)//, ref string value) { try { int sz =0; string value = ""; char[] param = new char[8]; fixed (char* p = ¶m[0]) { //string param = ""; int res = OwenIO(adr, adr_type, 1, command, p, ref sz); for (int i = 0; i < param.Length; i++) value += param[i]; // System.Windows.Forms.MessageBox.Show(sz + "\n" + value); return res; } } catch { return -1000; } }
для начала надо понять разницу между строками в C и в C#, а потом почитать что-нибудь про взаимодействие с неуправляемым кодом. и тогда все само расшифруется.
Код:[DllImportAttribute("owen_io.dll", EntryPoint = "OwenIO", CallingConvention = CallingConvention.StdCall)] public static extern int OwenIO(int adr, int adr_type, int is_read, string command, IntPtr dev, ref int params_sz); public static int read_owen_io(int adr, int adr_type, string command) { int sz = 0; IntPtr param = Marshal.AllocCoTaskMem(15); int res = OwenIO(adr, adr_type, 1, command, param, ref sz); if (res == 0) { string value = Marshal.PtrToStringAnsi(param, sz); } Marshal.FreeCoTaskMem(param); return res; }
не получается. возвращает ошибку 47.
каким образом модно записать уставку? не могли бы вы привести рабочий код? то, что вы написали не работает.
Разобрался.
индекс должен быть кратен 3 (состояние работы).
error = Owen_io.WriteStoredDotS(16, ADRTYPE_8BIT, "SP.LU", (float)t, 3 * (channel - 1));
Последний раз редактировалось ToniPizecato; 19.07.2010 в 20:20.