Инструменты пользователя

Инструменты сайта


подключить-как-dll-через-loadlibrary

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
Последняя версия Следующая версия справа и слева
подключить-как-dll-через-loadlibrary [2020/04/15 20:36]
iserbin [Общее описание]
подключить-как-dll-через-loadlibrary [2020/04/17 23:57]
iserbin
Строка 25: Строка 25:
 | 3| Нет ответа от весов. Возможно:​ \\ 1. Проверьте правильность выбора типа весов, СОМ-порта и скорость СОМ-порта. \\ 2. Некоторые весы не передают вес, если он меньше ли равен НУЛЮ. \\ 3. На некоторых весах нужно настроить специальные параметры,​ чтоб узнать как настроить нажмите кнопку "​Что нужно настроить в весах"​в программе настройки драйвера.| | 3| Нет ответа от весов. Возможно:​ \\ 1. Проверьте правильность выбора типа весов, СОМ-порта и скорость СОМ-порта. \\ 2. Некоторые весы не передают вес, если он меньше ли равен НУЛЮ. \\ 3. На некоторых весах нужно настроить специальные параметры,​ чтоб узнать как настроить нажмите кнопку "​Что нужно настроить в весах"​в программе настройки драйвера.|
 | 4| Ошибка в цене, например число меньше нуля, или больше чем к-во разрядов на весах.| | 4| Ошибка в цене, например число меньше нуля, или больше чем к-во разрядов на весах.|
-| 5| Ошибка в типе весов. Может ​возникнуть ​если ​settings.ini и UniproScalesComServer.dll разных ​версий. |+| 5| Текущий ​тип весов ​не поддерживает команду, например, ​не на все модели весов можно передать цену, ​или нажать "​ТАРА"​. |
 | 6| Связь с весами ОК, но отсутствует лицензия на драйвер. Без лицензии можно получить вес в диапазонах:​ [80..110 г.]  [2..3 кг.] ​ [19..22 кг.] ​ [95..105 кг.]| | 6| Связь с весами ОК, но отсутствует лицензия на драйвер. Без лицензии можно получить вес в диапазонах:​ [80..110 г.]  [2..3 кг.] ​ [19..22 кг.] ​ [95..105 кг.]|
 | 7| На весах "​Перегруз"​. (Некоторые модели весов передают такую информацию)| | 7| На весах "​Перегруз"​. (Некоторые модели весов передают такую информацию)|
-| 8| Нет весов в settings.ini с указанным номером **p_scales**. Возникает если нет файла "​settings.ini"​ или в нем нет такого номера весов. |+| 8| Нет весов в settings.ini с указанным номером **p_scales**. Возникает если нет файла "​settings.ini"​ или в нем нет такого номера весов. Возможно,​ не была вызвана функция "​vr1"​. |
  
 Порядок вызовов функций:​ после загрузки UniproScalesComServer.dll в программу нужно вызвать функцию:​ **vr1**, после этого можно вызывать все другие функции (gw1, pp1, pt1) в любом порядке. Порядок вызовов функций:​ после загрузки UniproScalesComServer.dll в программу нужно вызвать функцию:​ **vr1**, после этого можно вызывать все другие функции (gw1, pp1, pt1) в любом порядке.
  
-===== Пример на c# =====+===== Пример на C# =====
 <code csharp> <code csharp>
 using System; using System;
Строка 46: Строка 46:
     {     {
         // Load parameters from INI-file         // Load parameters from INI-file
-        [DllImport("​UniproScalesComServer.dll", CallingConvention = CallingConvention.StdCall)]+        [DllImport("​UniproScalesComServerWin32.dll", CallingConvention = CallingConvention.StdCall)]
         public static extern int vr1();         public static extern int vr1();
  
         // get weight from scales         // get weight from scales
-        [DllImport("​UniproScalesComServer.dll", CallingConvention = CallingConvention.StdCall)]+        [DllImport("​UniproScalesComServerWin32.dll", CallingConvention = CallingConvention.StdCall)]
         public static extern int gw1(int p_scales, ​         public static extern int gw1(int p_scales, ​
                                     ref double p_weight, ​                                     ref double p_weight, ​
Строка 57: Строка 57:
                                     ref int p_stab );                                     ref int p_stab );
         // send price         // send price
-        [DllImport("​UniproScalesComServer.dll", CallingConvention = CallingConvention.StdCall)]+        [DllImport("​UniproScalesComServerWin32.dll", CallingConvention = CallingConvention.StdCall)]
         public static extern int pp1(int p_scales, int p_price);         public static extern int pp1(int p_scales, int p_price);
  
         // press "​T"​         // press "​T"​
-        [DllImport("​UniproScalesComServer.dll", CallingConvention = CallingConvention.StdCall)]+        [DllImport("​UniproScalesComServerWin32.dll", CallingConvention = CallingConvention.StdCall)]
         public static extern int pt1(int p_scales);         public static extern int pt1(int p_scales);
  
Строка 104: Строка 104:
 </​code>​ </​code>​
  
 +===== Пример на Delphi =====
 +<code delphi>
 +unit Unit1;
 +
 +interface
 +
 +uses
 +  Winapi.Windows,​ Winapi.Messages,​ System.SysUtils,​ System.Variants,​ System.Classes,​ Vcl.Graphics,​
 +  Vcl.Controls,​ Vcl.Forms, Vcl.Dialogs,​ Vcl.StdCtrls;​
 +
 +type
 +  TForm1 = class(TForm)
 +    Memo1: TMemo;
 +    ButtonGetWeight:​ TButton;
 +    ButtonPressTara:​ TButton;
 +    ButtonSendPrice:​ TButton;
 +    EditPrice: TEdit;
 +    procedure ButtonGetWeightClick(Sender:​ TObject);
 +    procedure ButtonPressTaraClick(Sender:​ TObject);
 +    procedure ButtonSendPriceClick(Sender:​ TObject);
 +    procedure FormCreate(Sender:​ TObject);
 +  private
 +    { Private declarations }
 +    res1 :Int32;
 +  public
 +    { Public declarations }
 +  end;
 +
 +function scalesdll_Init():​ integer; stdcall; external '​UniproScalesComServerWin32.dll'​ name '​vr1';​
 +
 +function scalesdll_GetWeight(
 +                  p_Num:​Int32;​
 +                  var p_weight:​Double;​
 +                  var p_price:​Double;​
 +                  var p_cost:​Double;​
 +                  var p_stab:​Int32
 +                  ): integer; stdcall; external '​UniproScalesComServerWin32.dll'​ name '​gw1';​
 +
 +function scalesdll_SendPrice(
 +                  p_Num:​Int32;​
 +                  p_Price:​Int32
 +                  ): integer; stdcall; external '​UniproScalesComServerWin32.dll'​ name '​pp1';​
 +
 +function scalesdll_PressTara(
 +                  p_Num:Int32
 +                  ): integer; stdcall; external '​UniproScalesComServerWin32.dll'​ name '​pt1';​
 +
 +var
 +  Form1: TForm1;
 +
 +implementation
 +
 +{$R *.dfm}
 +
 +procedure TForm1.FormCreate(Sender:​ TObject);
 +begin
 +  scalesdll_Init();​
 +end;
 +
 +procedure TForm1.ButtonGetWeightClick(Sender:​ TObject);
 +var
 +    lv_weight, lv_price, lv_cost:​Double;​
 +    lv_stab :Int32;
 +begin
 +  res1 := scalesdll_GetWeight( 1, lv_weight, lv_price, lv_cost, lv_stab );
 +
 +  if res1 <> 0 then
 +    Memo1.Lines.Add( '​Error:'​+IntToStr(res1) )
 +  else
 +    Memo1.Lines.Add( ​   '​Вес:'​+FloatToStr(lv_weight)
 +                    +'; Цена:'​+FloatToStr(lv_price)
 +                    +'; Стоимость:'​+FloatToStr(lv_cost)
 +                    +'; Стабильно:'​+IntToStr(lv_stab)
 +                  );
 +end;
 +
 +procedure TForm1.ButtonPressTaraClick(Sender:​ TObject);
 +begin
 +  res1 := scalesdll_SendPrice( 1, StrToInt(EditPrice.Text) );
 +
 +  if res1 <> 0 then Memo1.Lines.Add( '​Error:'​+IntToStr(res1) );
 +
 +end;
 +
 +procedure TForm1.ButtonSendPriceClick(Sender:​ TObject);
 +begin
 +  res1 := scalesdll_PressTara( 1 );
 +
 +  if res1 <> 0 then Memo1.Lines.Add( '​Error:'​+IntToStr(res1) );
 +end;
 +
 +end.
 +
 +</​code>​
 +===== Пример на  C++ =====
 +<code cpp>
 +#include <​windows.h>​
 +#include <​stdio.h>​
 +
 +typedef long(__stdcall *dllScalesInit)();​
 +typedef long(__stdcall *dllScalesGetWeight)(int p_scales, ​
 + double & p_weight, ​
 + double & p_price, ​
 + double &​p_cost, ​
 + long &​p_stab);​
 +typedef long(__stdcall *dllScalesSendPrice)(int p_scales, int p_price);
 +typedef long(__stdcall *dllScalesPressT)(int p_scales);
 +
 +/////////////////////////////​
 +// Global variables
 +HMODULE global_hLib;​
 +dllScalesInit global_ScalesInit;​
 +dllScalesGetWeight global_ScalesGetWeight;​
 +dllScalesSendPrice global_ScalesSendPrice;​
 +dllScalesPressT global_ScalesPressT;​
 +
 +int main()
 +{
 + global_hLib = LoadLibrary("​UniproScalesComServerWin32.dll"​);​
 +
 + if (global_hLib == NULL)
 + {
 + printf("​Error load DLL."​);​
 + return 1;
 + }
 +
 + global_ScalesInit = (dllScalesInit)GetProcAddress(global_hLib,​ "​vr1"​);​
 + global_ScalesGetWeight = (dllScalesGetWeight)GetProcAddress(global_hLib,​ "​gw1"​);​
 + global_ScalesSendPrice = (dllScalesSendPrice)GetProcAddress(global_hLib,​ "​pp1"​);​
 + global_ScalesPressT = (dllScalesPressT)GetProcAddress(global_hLib,​ "​pt1"​);​
 +
 + if ( !global_ScalesInit ||
 + !global_ScalesGetWeight ||
 + !global_ScalesSendPrice ||
 + !global_ScalesPressT)
 + {
 + printf("​Error load functions from DLL."​);​
 + return 2;
 + }
 +
 + global_ScalesInit();​
 +
 + int res1 = 0;
 + double lv_weight;​
 + double lv_price;​
 + double lv_cost;​
 + long lv_stab;​
 +
 + res1 = global_ScalesSendPrice(1,​ 12345);
 + if (res1) ​ printf("​Error:​ %d\r\n",​ res1);
 +
 + res1 = global_ScalesGetWeight(1,​ lv_weight, lv_price, lv_cost, lv_stab);
 + if (!res1)
 + {
 + printf("​Weight:​ %6.3f; Price:​%6.2f;​ Cost: %6.2f; Stab: %d.\r\n",​
 + lv_weight,​ lv_price, lv_cost, lv_stab);
 + }
 + else
 + {
 + printf("​Error:​ %d\r\n",​ res1);
 + }
 +
 + res1 = global_ScalesPressT(1);​
 + if (res1) ​ printf("​Error:​ %d\r\n",​ res1);
 +
 + FreeLibrary(global_hLib);​
 + printf("​Press [ENTER]\r\n"​);​
 + getchar();
 +    return 0;
 +}
 +</​code>​
  
подключить-как-dll-через-loadlibrary.txt · Последние изменения: 2020/04/18 00:01 — iserbin