Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия Последняя версия Следующая версия справа и слева | ||
подключить-как-dll-через-loadlibrary [2020/04/15 20:38] iserbin [Общее описание] |
подключить-как-dll-через-loadlibrary [2020/04/17 23:57] iserbin |
||
---|---|---|---|
Строка 25: | Строка 25: | ||
| 3| Нет ответа от весов. Возможно: \\ 1. Проверьте правильность выбора типа весов, СОМ-порта и скорость СОМ-порта. \\ 2. Некоторые весы не передают вес, если он меньше ли равен НУЛЮ. \\ 3. На некоторых весах нужно настроить специальные параметры, чтоб узнать как настроить нажмите кнопку "Что нужно настроить в весах"в программе настройки драйвера.| | | 3| Нет ответа от весов. Возможно: \\ 1. Проверьте правильность выбора типа весов, СОМ-порта и скорость СОМ-порта. \\ 2. Некоторые весы не передают вес, если он меньше ли равен НУЛЮ. \\ 3. На некоторых весах нужно настроить специальные параметры, чтоб узнать как настроить нажмите кнопку "Что нужно настроить в весах"в программе настройки драйвера.| | ||
| 4| Ошибка в цене, например число меньше нуля, или больше чем к-во разрядов на весах.| | | 4| Ошибка в цене, например число меньше нуля, или больше чем к-во разрядов на весах.| | ||
- | | 5| Текущий тип весов не поддерживает команды, например, не на все типы моделей можно передать цену, или нажать "ТАРА". | | + | | 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> | ||