Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Написание внешней компоненты под 1С / 8 сообщений из 8, страница 1 из 1
30.05.2018, 14:17
    #39652510
Zelius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написание внешней компоненты под 1С
Всем привет!

Что то никак не могу подключить свою самописную компоненту к 1С. Писал по шаблону из интернета, но хоть тресни - не подключается! На строке
Подключено = ПодключитьВнешнююКомпоненту("AddIn.Data");
всегда выдает Ложь. Может есть какая-то хитрость? Уже дня три периодически к гуглу обращаюсь, но никак не разберусь...

С уважением, Князев Константин
...
Рейтинг: 0 / 0
30.05.2018, 14:47
    #39652551
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написание внешней компоненты под 1С
Zeliusсвою самописную компоненту к 1С
Формат разный для разных версий 1С, на сколько я знаю.
Т.ч. ты уточняй, когда у гугла спрашиваешь, для какой версии 1С тебе пример нужен. И на какой версии делфи.
...
Рейтинг: 0 / 0
30.05.2018, 15:00
    #39652570
Zelius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написание внешней компоненты под 1С
YuRock,

я пытаюсь подключить на 1С 8.3, пишу на Delphi Seattle, моя утилита подключается к компоненте на ура...
...
Рейтинг: 0 / 0
30.05.2018, 15:53
    #39652632
Граур Станислав
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написание внешней компоненты под 1С
ZeliusВсем привет!

Что то никак не могу подключить свою самописную компоненту к 1С. Писал по шаблону из интернета, но хоть тресни - не подключается! На строке
Подключено = ПодключитьВнешнююКомпоненту("AddIn.Data");
всегда выдает Ложь. Может есть какая-то хитрость? Уже дня три периодически к гуглу обращаюсь, но никак не разберусь...

С уважением, Князев Константин

".Data" -- можно пример из твоего исходника? Там должно быть нечто вроде

Пример на инфостарте


//Тут вместо MySuperExtention должна быть твоя строка 'Data'
Код: pascal
1.
2.
3.
4.
5.
6.
7.
with ClassRegList.RegisterClass(TMyClass, 'MySuperExtention', 'TMyClass') do

begin

AddFunc('Hello', 'Привет', @TMyClass.Hello, 0); //регистрируем функцию

end;



либо
...
Рейтинг: 0 / 0
30.05.2018, 15:55
    #39652635
Zelius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написание внешней компоненты под 1С
я запустил ProcessMonitor и вообще не увидел обращения к ключам реестра компоненты! Как так? Может там есть в 1С настройка запрещающая подключение ВК?
...
Рейтинг: 0 / 0
30.05.2018, 16:04
    #39652644
Zelius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написание внешней компоненты под 1С
Граур Станислав,

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
unit AddInObj;

interface

uses
  ComServ, ComObj, ActiveX, SysUtils, Windows, AddInLib, DataImportExport1C;

const
  __AddInName = 'Data';

const
  __PropCount = 0;
  __MethCount = 2;

type
  TAddInObject = class(TComObject, IDispatch, IInitDone, ILanguageExtender)
  private
    FData: TDataImportExport1C;
    F1Cv7: IDispatch;
    FStatusIntf: IStatusLine;
    FExtWindowsIntf: IExtWndsSupport;
    FErrorIntf: IErrorLog;
    FEventIntf: IAsyncEvent;
  protected
    { IInitDone implementation }
    function Init(AConnection: IDispatch): HResult; stdcall;
    function Done: HResult; stdcall;
    function GetInfo(var AInfo: PSafeArray): HResult; stdcall;

    { ILanguageExtender implementation }
    function RegisterExtensionAs(var AExtensionName: WideString): HResult; stdcall;
    function GetNProps(var AProps: Integer): HResult; stdcall;
    function FindProp(const APropName: WideString; var APropNum: Integer): HResult; stdcall;
    function GetPropName(APropNum, APropAlias: Integer; var APropName: WideString): HResult; stdcall;
    function GetPropVal(APropNum: Integer; var APropVal: OleVariant): HResult; stdcall;
    function SetPropVal(APropNum: Integer; var APropVal: OleVariant): HResult; stdcall;
    function IsPropReadable(APropNum: Integer; var APropRead: Integer): HResult; stdcall;
    function IsPropWritable(APropNum: Integer; var APropWrite: Integer): HResult; stdcall;
    function GetNMethods(var AMethods: Integer): HResult; stdcall;
    function FindMethod(const AMethodName: WideString; var AMethodNum: Integer): HResult; stdcall;
    function GetMethodName(AMethodNum, AMethodAlias: Integer; var AMethodName: WideString): HResult; stdcall;
    function GetNParams(AMethodNum: Integer; var AParams: Integer): HResult; stdcall;
    function GetParamDefValue(AMethodNum, AParamNum: Integer; var AParamDefValue: OleVariant): HResult; stdcall;
    function HasRetVal(AMethodNum: Integer; var ARetValue: Integer): HResult; stdcall;
    function CallAsProc(AMethodNum: Integer; var AParams: PSafeArray): HResult; stdcall;
    function CallAsFunc(AMethodNum: Integer; var ARetValue: OleVariant; var AParams: PSafeArray): HResult; stdcall;

    { IStatusLine }
    function SetStatusLine(const bstrSource: WideString): HResult; safecall;
    function ResetStatusLine(): HResult; safecall;

    { IDispatch }
    function GetIDsOfNames(const IID: TGUID; Names: Pointer; NameCount, LocaleID: Integer; DispIDs: Pointer): HResult; virtual; stdcall;
    function GetTypeInfo(Index, LocaleID: Integer; out TypeInfo): HResult; virtual; stdcall;
    function GetTypeInfoCount(out Count: Integer): HResult; virtual; stdcall;
    function Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer; Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HResult; virtual; stdcall;

    procedure ShowErrorLog(fMessage: WideString);
  end;

implementation

uses StrUtils, Variants;

{ IInitDone implementation }

function TAddInObject.Init(AConnection: IDispatch): HResult; stdcall;
begin
  FData := TDataImportExport1C.Create;

  F1Cv7 := AConnection;
  if F1Cv7 <> nil then
  begin
    OleCheck(AConnection.QueryInterface(IID_IErrorLog, FErrorIntf));
    OleCheck(AConnection.QueryInterface(IID_IStatusLine, FStatusIntf));
    OleCheck(AConnection.QueryInterface(IID_IAsyncEvent, FEventIntf));
    OleCheck(AConnection.QueryInterface(IID_IExtWndsSupport, FExtWindowsIntf));
  end;

  Init := S_OK;
end;

function TAddInObject.Done: HResult; stdcall;
begin
  FStatusIntf := nil;
  FExtWindowsIntf := nil;
  FErrorIntf := nil;
  FEventIntf := nil;
  FreeAndNil(FData);
  Result := S_OK;
end;

function TAddInObject.GetInfo(var AInfo: PSafeArray): HResult; stdcall;
var
  LVarInfo: OleVariant;
  LVarIndex: Integer;
begin
  LVarIndex := 0;
  LVarInfo := '2000';
  SafeArrayPutElement(AInfo, LVarIndex, LVarInfo);
  Result := S_OK;
end;

{ ILanguageExtender implementation }

function TAddInObject.RegisterExtensionAs(var AExtensionName: WideString): HResult; stdcall;
begin
  AExtensionName := __AddinName;
  RegisterExtensionAs := S_OK;
end;

function TAddInObject.GetNProps(var AProps: Integer): HResult; stdcall;
begin
  AProps := __PropCount;
  Result := S_OK;
end;

function TAddInObject.FindProp(const APropName: WideString; var APropNum: Integer): HResult; stdcall;
begin
  APropNum := -1;
  FindProp := S_FALSE;
end;

function TAddInObject.GetPropName(APropNum, APropAlias: Integer; var APropName: WideString): HResult; stdcall;
begin
  APropName := '';
  GetPropName := S_OK;
end;

function TAddInObject.GetPropVal(APropNum: Integer; var APropVal: OleVariant): HResult; stdcall;
begin
  Result := S_FALSE;
end;

function TAddInObject.SetPropVal(APropNum: Integer; var APropVal: OleVariant): HResult; stdcall;
begin
  Result := S_FALSE;
end;

function TAddInObject.IsPropReadable(APropNum: Integer; var APropRead: Integer): HResult; stdcall;
begin
  Result := S_OK;
end;

function TAddInObject.IsPropWritable(APropNum: Integer; var APropWrite: Integer): HResult; stdcall;
begin
  Result := S_OK;
end;

function TAddInObject.GetNMethods(var AMethods: Integer): HResult; stdcall;
begin
  AMethods := __MethCount;
  Result := S_OK;
end;

function TAddInObject.FindMethod(const AMethodName: WideString; var AMethodNum: Integer): HResult; stdcall;
begin
  AMethodNum := IndexText(AMethodName, ['GetData', 'GetDataStr']);
  if AMethodNum >= 0 then
    Result := S_OK
  else
    Result := S_FALSE;
end;

function TAddInObject.GetMethodName(AMethodNum, AMethodAlias: Integer; var AMethodName: WideString): HResult; stdcall;
begin
  Result := S_OK;
  case AMethodNum of
    0: AMethodName := 'GetData';
    1: AMethodName := 'GetDataStr';
  else
    Result := E_NOTIMPL;
  end;
end;

function TAddInObject.GetNParams(AMethodNum: Integer; var AParams: Integer): HResult; stdcall;
begin
  case AMethodNum of
    0, 1: begin
      AParams := 1;
      REsult := S_OK;
    end;
  else
    Result := S_FALSE;
  end;
end;

function TAddInObject.GetParamDefValue(AMethodNum, AParamNum: Integer; var AParamDefValue: OleVariant): HResult; stdcall;
begin
  VarClear(AParamDefValue);
  GetParamDefValue := S_OK;
end;

function TAddInObject.HasRetVal(AMethodNum: Integer; var ARetValue: Integer): HResult; stdcall;
begin
  ARetValue := 1;
  HasRetVal := S_OK;
end;

function TAddInObject.CallAsProc(AMethodNum: Integer; var AParams: PSafeArray): HResult; stdcall;
begin
  Result := E_NOTIMPL;
end;

function TAddInObject.CallAsFunc(AMethodNum: Integer; var ARetValue: OleVariant; var AParams: PSafeArray): HResult; stdcall;
var
  Index: Integer;
  LParam: OleVariant;
  Data: TBytes;
  Hash: TBytes;
  LVarData: Pointer;
begin
  try
    ARetValue := 0;
    Result := S_OK;
    Index := 0;
    OleCheck(SafeArrayGetElement(AParams, Index, LParam));
    case AMethodNum of
      0: begin
        Hash := FData.GetData(LParam);
      end;
      1: begin
        Data := LParam;
        Hash := FData.GetDataStr(Data);
      end
    else
      Result := E_NOTIMPL;
    end; // case

    if Result = S_OK then
    begin
      ARetValue := VarArrayCreate([0, Length(Hash) - 1], varByte);
      LVarData := VarArrayLock(ARetValue);
      try
        Move(Pointer(Hash)^, LVarData^, Length(Hash));
      finally
        VarArrayUnlock(ARetValue);
      end;
    end;
  except
    on E: Exception do
    begin
      ShowErrorLog(E.Message);
      Result := ERROR_INVALID_DATA;
    end;
  end;
end;

function TAddInObject.GetIDsOfNames(const IID: TGUID; Names: Pointer;
  NameCount, LocaleID: Integer; DispIDs: Pointer): HResult;
begin
  Result := E_NOTIMPL;
end;

/// /////////////////////////////////////////////////////////////////////
function TAddInObject.GetTypeInfo(Index, LocaleID: Integer;
  out TypeInfo): HResult;
begin
  Result := E_NOTIMPL;
end;

/// /////////////////////////////////////////////////////////////////////
function TAddInObject.GetTypeInfoCount(out Count: Integer): HResult;
begin
  Result := E_NOTIMPL;
end;

function TAddInObject.Invoke(DispID: Integer; const IID: TGUID;
  LocaleID: Integer; Flags: Word; var Params;
  VarResult, ExcepInfo, ArgErr: Pointer): HResult;
begin
  Result := E_NOTIMPL;
end;

procedure TAddInObject.ShowErrorLog(fMessage: WideString);
var
  ErrInfo: PExcepInfo;
begin
  If (Trim(fMessage) = '') or (FErrorIntf = nil) then
    Exit;

  New(ErrInfo);
  ErrInfo^.bstrSource := __AddinName;
  ErrInfo^.bstrDescription := fMessage;
  ErrInfo^.wCode := 1006;
  ErrInfo^.sCode := E_FAIL;
  FErrorIntf.AddError(nil, ErrInfo);
end;

{ IStatusLine }

function TAddInObject.SetStatusLine(const bstrSource: WideString): HResult;
begin
  Result := S_FALSE;
end;

function TAddInObject.ResetStatusLine: HResult;
begin
  Result := S_FALSE;
end;

begin
  ComServer.SetServerName('AddIn');
  TComObjectFactory.Create(ComServer, TAddInObject, CLSID_AddInObject, __AddInName, 'Data AddIn for 1C V7 2.0', ciMultiInstance);
end.
...
Рейтинг: 0 / 0
30.05.2018, 16:15
    #39652659
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написание внешней компоненты под 1С
ZeliusYuRock,

я пытаюсь подключить на 1С 8.3, пишу на Delphi Seattle, моя утилита подключается к компоненте на ура...
Ты это гуглу пиши, не мне. Я не в курсе. Лет 15 назад писал для 1С 7, но уже и забыл как и исходники потерял.
...
Рейтинг: 0 / 0
30.05.2018, 16:36
    #39652680
Граур Станислав
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написание внешней компоненты под 1С
Ой, это же еще 7.7
Не углядел, извиняюсь.
Нафиг-нафиг.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Написание внешней компоненты под 1С / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]