![]() |
![]() |
|
Как подключить к 1С 8.1 подключить библиотеку стороннего производителя (*.dll) | ☑ | ||
---|---|---|---|---|
0
Alexander Shevchuck
17.12.09
✎
12:33
|
Есть ли возможность подключить к 1С 8.1 подключить библиотеку стороннего производителя (*.dll), которая не разрабатывалась как внешняя компонента для 1С.
|
|||
1
Salvador Limones
17.12.09
✎
12:34
|
Да, есть.
|
|||
2
Alexander Shevchuck
17.12.09
✎
12:36
|
(1) Подскажите, пожалуйста, какие механизмы нужно использовать
|
|||
3
Salvador Limones
17.12.09
✎
12:37
|
(2) Сначала зарегать, потом через Новый COMОбъект заюзать.
|
|||
4
Alexander Shevchuck
17.12.09
✎
12:42
|
(3) Спасибо попробую
|
|||
5
Gepard
17.12.09
✎
13:09
|
(3) это если библиотека писалась как COM объект
|
|||
6
Alexander Shevchuck
17.12.09
✎
16:19
|
(3) Не регистрируется, библиотека называется Ekomilk11.dll, поместил я ее на диск С в корень, пробую регистрировать через RegSRV32 (пуск -> выпонить -> Regsvr32 /i c:\Ekomilk11.dll), Regsvr32 возвращает такое вот ругательство :
c:\Ekomilk11.dll была загружена, но найти точку входа для DllRegisterServer не удалось. Зарегистрировать этот файл невозможно. А можно ли подключить библиотеку без регистрации |
|||
7
ДенисЧ
17.12.09
✎
16:20
|
(6) твоя библиотека не работает com-объектом. Так что в /dev/nul её :-)
|
|||
8
Salvador Limones
17.12.09
✎
16:21
|
(6) Нет. Значит не судьба. См (5)
|
|||
9
Alexander Shevchuck
17.12.09
✎
16:23
|
(8) у меня есть пример ее использования на Delphi, может он прольет свет?
|
|||
10
H A D G E H O G s
17.12.09
✎
16:23
|
(6) Могу написать
COM или ВК (мне без разницы) оболочку. За небольшие деньги. |
|||
11
H A D G E H O G s
17.12.09
✎
16:24
|
(9) ООо, тем более есть пример на моем любимом Дельфи.
Еще и быстро сделаю. |
|||
12
Alexander Shevchuck
17.12.09
✎
16:24
|
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Spin; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; SpinEdit1: TSpinEdit;//TSpinEdit; SpinEdit2: TSpinEdit;//TSpinEdit; SpinEdit3: TSpinEdit; SpinEdit4: TSpinEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure SpinEdit1Change(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; ii:longint; p1,p2,p3,p4:string; {IFNDEF Ekomilk11} {определяем функции определенные в Ecomilk11.dll} {Все ф-ии и процедуры необходимо загружать только 1 раз} {инициализация ресурсов DLL.} function Init(AHandle: THandle; ACaption: String): Longint; StdCall; {инициализация COM-порта с использованием функции обратного вызова} {!!!!!!! ACaption = кол-во параметров !!!!!!!!!!!} procedure ConnectPort(AHandle: THandle; Port,Param: word; Point:Pointer; AProc: TFarProc); StdCall; {освобождение ресурсов DLL} procedure DeInit(AFormRef: Longint); StdCall; {ENDIF} implementation {IFNDEF Ekomilk11} {определяем импортированные функции} function Init; external 'Ekomilk11.dll' name 'Init'; procedure ConnectPort; external 'Ekomilk11.dll' name 'ConnectPort'; procedure DeInit; external 'Ekomilk11.dll' name 'DeInit'; {ENDIF} {$R *.DFM} {Определяем процедуру, обратного вызова с использованием директивы StdCall} procedure ParamValue(Port:Pointer;Ret: PChar); StdCall; //имя, текст процедуры произвольный, //но структура (procedure ИМЯ(ПАРАМ: PChar); StdCall;) неизмена begin ShowMessage(String(Port^)+' -> '+Ret); //сообщение, где Ret-результат(6-ть параметров) //разделенных символов ";" end; procedure TForm1.Button1Click(Sender: TObject); Var param:word; begin //инициализация COM-порта //ConnectPort(longint - ссылка на ресурсы DLL,значение возвращаемое ф-ей Init; // 1..4 - номер порта; // 6,9 - кол-во параметров прибора 6 или 9 // @ - ссылка на процедуру обратного вызова. param:=TSpinEdit(FindComponent('SpinEdit'+(Sender as TButton).name[7])).Value; with Sender as TButton do begin case name[7] of '1': begin p1:='Порт1'; ConnectPort(ii, 1, param, @p1, @ParamValue); end; '2': begin p2:='Порт2'; ConnectPort(ii, 2, param, @p2, @ParamValue); end; '3': begin p3:='Порт3'; ConnectPort(ii, 3, param, @p3, @ParamValue); end; '4': begin p4:='Порт4'; ConnectPort(ii, 4, param, @p4, @ParamValue); end; end; Enabled:=false; end; TSpinEdit(FindComponent('SpinEdit'+(Sender as TButton).name[7])).Visible:=false; end; procedure TForm1.FormCreate(Sender: TObject); begin {инициализация ресурсов DLL.} // THandle- дискриптор приложения; // String - произвольное, уникальное имя. ii:=Init(Application.Handle, '11'); //результат (longint)-ссылка на ресурсы DLL, // используется в ф-ях ConnectPort, DeInit end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin DeInit(ii); end; procedure TForm1.SpinEdit1Change(Sender: TObject); Const s = [6,9,10,11,12]; begin SpinEdit1.Value; SpinEdit1.Text; {with Sender as TSpinEdit do if Value>MaxValue then Value:=MaxValue else if Value<MinValue then Value:=MinValue;} end; end. |
|||
13
H A D G E H O G s
17.12.09
✎
16:28
|
(12) см (10)
|
|||
14
H A D G E H O G s
17.12.09
✎
16:29
|
case name[7] of
'1': begin p1:='Порт1'; ConnectPort(ii, 1, param, @p1, @ParamValue); end; '2': begin p2:='Порт2'; ConnectPort(ii, 2, param, @p2, @ParamValue); end; '3': begin p3:='Порт3'; ConnectPort(ii, 3, param, @p3, @ParamValue); end; '4': begin p4:='Порт4'; ConnectPort(ii, 4, param, @p4, @ParamValue); end; end; Это - в мемориз!! |
|||
15
Alexander Shevchuck
17.12.09
✎
16:29
|
(13) проблема в том, что *.dll купленая :)
|
|||
16
Alexander Shevchuck
17.12.09
✎
16:32
|
(14) проблема состоит в том, что продавец прибора никак не хочет сообщать каким образом можно поймать данные с прибора, говорят, что это закрытая информация, предлагают покупать или их прогу или библиотеку
|
|||
17
H A D G E H O G s
17.12.09
✎
16:35
|
аську свою кинь
|
|||
18
Alexander Shevchuck
17.12.09
✎
16:37
|
224-954-187
|
|||
19
H A D G E H O G s
17.12.09
✎
16:39
|
иии, желательно, зайди в нее.
|
|||
20
H A D G E H O G s
17.12.09
✎
16:59
|
Отвалилась аська
Пишет: "Ошибка резервной линковки." Жду. |
|||
21
kolpak
17.12.09
✎
17:09
|
Может это поможет
Библиотека dynwrap.dll - небольшой ActiveX, который может быть использован в любых средах, которые в состоянии выступить в роли OLE-клиента, например, в MS Office (VBA), 1C:Предприятии, административных скриптах Windows (.vbs и .js) и т.д. Библиотека является результатом труда нескольких разработчиков. Библиотека dynwrap.dll распространяется свободно.Библиотека обеспечивает подобие инструкции "Declare" в VBScript. Это позволяет вызывать произвольные функции из DLL-библиотек (например, win32 функции API). |
|||
22
v8Newbie
17.12.09
✎
17:33
|
(0) ПоХляди...http://infostart.ru/public/18636/
|
|||
23
Alexander Shevchuck
17.12.09
✎
18:32
|
(22) Спасибо, попробую
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |