Я работаю с IBM i Access Client Solution и должен реализовать некоторые функции ehllapi.dll для взаимодействия с экраном grean.
В нем есть документ IBM в по этой ссылке и некоторые полезные примеры кода в по этой ссылке .
В примере кода реализованы некоторые простые функции, и он работал отлично, но я не могу найти способ, как реализовать функцию, которая должна передавать строку данных, содержащую конкретные данные для каждого байта, в метод интерфейса, который был реализован в источнике примера код. (как Функция состояния окна )
Кто-нибудь может мне помочь? Как я могу создать строку данных для передачи в интерфейс кода C # ниже?
public class EhllapiFunc
{
[DllImport("PCSHLL32.dll")]
public static extern UInt32 hllapi(out UInt32 Func, StringBuilder Data, out UInt32 Length, out UInt32 RetC);
}
Спасибо за вашу помощь.
--------------- EDIT1 -----------------------
Я пытался создать параметр буфера данных, используя byte[]
, как это
byte[] buffer = new byte[28];
buffer[0] = (byte)65 // letter A
buffer[4] = (byte)0x01 // the fifth byte (X'01' for set status)
...
и затем перейдите в отредактированный прототип
public class EhllapiFunc
{
[DllImport("PCSHLL32.dll")]
public static extern UInt32 hllapi(out UInt32 Func, out byte[] Data, out UInt32 Length, out UInt32 RetC);
}
но это не работает! Что-то не так с моим кодом?
--------------- Решение -----------------------
Мне понравилось, как сказал @battlmonstr, и это сработало!
Прототип будет
публичный класс EhllapiFunc
{
[DllImport("PCSHLL32.dll")]
public static extern UInt32 hllapi(out UInt32 Func, Byte[] Data, out UInt32 Length, out UInt32 RetC);
}
И орудие будет
Byte[] buffer = new Byte[28]; // Byte[] not byte[]
MemoryStream ms = new MemoryStream(buffer);
BinaryWriter bw = new BinaryWriter(ms);
bw.Write((Byte)65); // letter A
bw.Seek(4, SeekOrigin.Begin); // jump to 5th byte
bw.Write((Byte)0X01) // hexa 01