Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Работа библиотеки usbLib


Автор: pupkindeniska 3.3.2015, 12:09
Добрый день! Подскажите пожалуйста!
Имеется USB LCD Display (LCDSysInfo)
Есть пример на C#
Мне необходимо перенести пример на delphi 7
Использую так - же библиотеку USBLib как и на C# LibUsbDotNet

к Устройству подключаюсь - всё нормально, линию на экране выбираю и цвет текста а вот сам текст непонимаю как отправить, то какие то символы то пустота!
Что я делаю не так?!
Исходник прикрепил! Заранее благодарен!

Процедура отправки текста в линию на C# выглядит
Код

        public static void Display_text_on_line(int line, string textstring, bool leavespaceforicon,int alignment, int colorcode)
        {
            String Tempstring= textstring;
            Tempstring = Text_conversion(Tempstring, leavespaceforicon,alignment);

            System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
            Byte[] text_bytearray = encoding.GetBytes(Tempstring);
            int temp_2 = text_bytearray.Length;
            if (leavespaceforicon == false) temp_2 = temp_2 + 256;
            if (colorcode > 32) colorcode = 0;
            if (line < 1 || line > 6) line = 1;
            line = line - 1;
            int temp_3 = line * 256 + colorcode;
            UsbSetupPacket packet = new UsbSetupPacket((byte)(UsbCtrlFlags.Direction_Out | UsbCtrlFlags.RequestType_Vendor), (byte)24, (short)temp_2, (short)temp_3, (short)0x0);
  
            if (LCDDrive.MyUsbDevice != null)
            { LCDDrive.MyUsbDevice.ControlTransfer(ref packet, text_bytearray, text_bytearray.Length, out bytes_transferred); }
        }


Моя процедура на Delphi 7 выглядит:
Код

procedure TForm1.ButtonTextClick(Sender: TObject);
var
  handle: Pusb_dev_handle;
  i,line,tmpline: integer;
  text_string:AnsiString;
  LcdByte:TByteArr;
  //LcdByte: array of byte;
begin
usb_init();
if (usbOpenDevice(handle, USBDEV_SHARED_VENDOR_K, 'coldtears electronics', USBDEV_SHARED_PRODUCT_K, Product) <> 0) then
  begin
    raise Exception.Create(Format(
       'Could not find USB device "'+Product+'" with vid=$%x and pid=$%x !',
          [USBDEV_SHARED_VENDOR_K, USBDEV_SHARED_PRODUCT_K]));
        exit;
    end;

text_string:=Form1.Text_conversion(txtText.Text,true,1);
memoLog.Lines.Add('text_string='+text_string);

LcdByte:=ConvertStringAscii(text_string); //ASCI
line:=SpinLine.Value;
tmpline:=(line-1)*256+ComboColor.ItemIndex+1;

usb_control_msg(handle, 64, 24, 0, tmpline, LcdByte, sizeof(LcdByte), 5000);
usb_close(handle);
end;

Автор: Illusion Dolphin 3.3.2015, 13:16
Цитата

usb_control_msg(handle, 64, 24, 0, tmpline, LcdByte, sizeof(LcdByte), 5000);

А попробуйте вместо LcdByte передавать ссылку на массив

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)