Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
подключить-как-dll-через-loadlibrary [2020/04/15 20:33] iserbin |
подключить-как-dll-через-loadlibrary [2020/04/18 00:01] (текущий) iserbin [Общее описание] |
||
---|---|---|---|
Строка 6: | Строка 6: | ||
^ Название функции ^ Параметры ^ Описание ^ | ^ Название функции ^ Параметры ^ Описание ^ | ||
| vr1 | нет |Загружает настройки с "settings.ini" - файл должен находиться в одной директории с UniproScalesComServer.dll. Нужно вызвать при запуске приложения. \\ Возвращает всегда 0.| | | vr1 | нет |Загружает настройки с "settings.ini" - файл должен находиться в одной директории с UniproScalesComServer.dll. Нужно вызвать при запуске приложения. \\ Возвращает всегда 0.| | ||
- | | gw1| 5 |Получает вес/цену/стоимость с весов.| | + | | gw1| 5 параметров |Получает вес/цену/стоимость с весов.| |
| :::|[in] int **p_scales** | Номер весов, целое число (4 байта). Соответствует параметру "Номер весов в 1С" | | | :::|[in] int **p_scales** | Номер весов, целое число (4 байта). Соответствует параметру "Номер весов в 1С" | | ||
| :::|[out] double **p_weight** | Значение массы, дробное число (8 байт). | | | :::|[out] double **p_weight** | Значение массы, дробное число (8 байт). | | ||
Строка 12: | Строка 12: | ||
| :::|[out] double **p_cost**| Значение стоимости, дробное число (8 байт). Если весы не поддерживают = 0.| | | :::|[out] double **p_cost**| Значение стоимости, дробное число (8 байт). Если весы не поддерживают = 0.| | ||
| :::|[out] int **p_stab**| Признак успокоения/стабильности веса, дробное число (4 байта). \\ 0-не стабильно \\ 1-стабильно \\ не все модели весов поддерживают.| | | :::|[out] int **p_stab**| Признак успокоения/стабильности веса, дробное число (4 байта). \\ 0-не стабильно \\ 1-стабильно \\ не все модели весов поддерживают.| | ||
- | | pp1| 2 |Передача цены на весы. Не все модели весов поддерживают.| | + | | pp1| 2 параметра |Передача цены на весы. Не все модели весов поддерживают.| |
| :::|[in] int **p_scales** | Номер весов, целое число (4 байта). Соответствует параметру "Номер весов в 1С" | | | :::|[in] int **p_scales** | Номер весов, целое число (4 байта). Соответствует параметру "Номер весов в 1С" | | ||
| :::|[in] int **p_price** | Цена в копейках, целое число (4 байта). | | | :::|[in] int **p_price** | Цена в копейках, целое число (4 байта). | | ||
- | | pt1| 1 |Нажатие на весах кнопки "ТАРА". Не все модели весов поддерживают.| | + | | pt1| 1 параметр |Нажатие на весах кнопки "ТАРА". Не все модели весов поддерживают.| |
| :::|[in] int **p_scales** | Номер весов, целое число (4 байта). Соответствует параметру "Номер весов в 1С" | | | :::|[in] int **p_scales** | Номер весов, целое число (4 байта). Соответствует параметру "Номер весов в 1С" | | ||
Строка 23: | Строка 23: | ||
| 1| Не возможно установить соединение с весами. \\ Если СОМ-порт: Убедитесь в правильности имени СОМ порта, возможно, он занят другим приложением. \\ Если Ethernet: \\ 1. Проверьте правильность указания IP-адреса и TCP-порта. \\ 2. Ethernet-переходник весов должен работать в режиме: TCP-Server. \\ 3. Возможно, блокирует соединение Брандмауэр(Firewall).| | | 1| Не возможно установить соединение с весами. \\ Если СОМ-порт: Убедитесь в правильности имени СОМ порта, возможно, он занят другим приложением. \\ Если Ethernet: \\ 1. Проверьте правильность указания IP-адреса и TCP-порта. \\ 2. Ethernet-переходник весов должен работать в режиме: TCP-Server. \\ 3. Возможно, блокирует соединение Брандмауэр(Firewall).| | ||
| 2| Ошибка в работе драйвера СОМ-порта.| | | 2| Ошибка в работе драйвера СОМ-порта.| | ||
- | | 3| Нет ответа от весов. Возможно: \\ 1. Проверьте правильность выбора типа весов, СОМ-порта и скорость СОМ-порта. \\ 2. Некоторые весы не передают вес, если он меньше ли равен НУЛЮ. \\ 3. На некоторых весах нужно настроить специальные параметры, чтоб узнать как настроить нажмите кнопку "Что нужно настроить в весах"в программе настройки драйвера.| | + | | 3| Нет ответа от весов. Возможно: \\ 1. Проверьте правильность выбора типа весов, СОМ-порта и скорость СОМ-порта. \\ 2. Некоторые весы не передают вес, если он меньше ли равен НУЛЮ. \\ 3. На некоторых весах нужно настроить специальные параметры, чтоб узнать как настроить нажмите кнопку "Что нужно настроить в весах"в программе настройки драйвера. \\ 4. Соединительный кабель поврежден, отключен или распиновка неправильная (на СОМ-портовые кабеля нет стандартов, распиновку смотрите в программе настройки драйвера, клавиша "Что нужно настроить в весах") | |
| 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> | ||