Имя: Пароль:
1C
 
Как подключить к 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) Спасибо, попробую