потому что это указатель.
Вид для печати
потому что это указатель.
мой код на С#
Код://Универсальная функция чтения записи
[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));