Имя: Пароль:
1C
1С v8
v8: Внешняя компонента, снова
,
0 lEvGl
 
гуру
14.08.13
14:06
Доброго здоровья всем
Такая ситуация:
есть приложение, написанное на шарпе, скомпиленое и находится в рабочем состоянии (управляет неким станком). То есть это приложение, используя библиотеку станка, управляет им и параллельно пишет данные в базу(мдб).
Что хочу: переделать приложение на 1с (изменить алгоритмы записи данных в базу).
Открыл папку программы - в ней несколько экзешников, библиотек, конфиг и один tlb файл. Пробую просто подключить длл к себе в форме обработки - "Ошибка при загрузке внешней компоненты" без пояснений.
ЗагрузитьВнешнююКомпоненту("Компонента.dll");
Файл длл положил в bin, то что в кавычках пишу по имени файла.
Может не с того края подхожу?
1 lEvGl
 
гуру
14.08.13
14:09
Пытаясь исключить вариант с незарегистрированными в системе (Вин хр) библиотеками попробовал на "живом" компе, где программа работает - результат тот же
2 lEvGl
 
гуру
14.08.13
14:39
Пробую через ПодключитьВнешнююКомпоненту(ПутьКБиблиотеке, ПроизволноеИмя, ТипВнешнейКомпоненты.Native) тоже не хочет. Вроде как native, хотя СОМ тоже попробовал - возвращает ложь
ЧЯДНТ?
3 lEvGl
 
гуру
14.08.13
16:22
оп
4 Dimasik2007
 
14.08.13
16:25
А вы уверены, что "Компонента.dll" написано по стандартам 1С?
Просто так взять и подключить левую 1С не получиться.
http://its.1c.ru/db/metod81?db=metod81#content:3221:1
5 lEvGl
 
гуру
14.08.13
16:38
нет, не уверен. даже уверен что нет. Получается, что 1с может брать только специально написанные под НЕЕ библиотеки? Visual Studio по барабану ?
6 lEvGl
 
гуру
14.08.13
16:40
+ (5) с DynWrap никто положительного опыта не имел в таком случае ? если я правильно понимаю логику
7 H A D G E H O G s
 
14.08.13
16:48
(5) Нет.
(6) Неправильно понимаешь.
8 Dimasik2007
 
14.08.13
16:50
Всегда можно написать обертку: компонент по стандартам будет юзать ту же стороннюю длл-ку, пишется влет.
Я когда делал, на инфостарте взял пример на C# от Душелова (хороший был разработчик :), там все действия сводились к копипасту по сути методов.
9 H A D G E H O G s
 
14.08.13
16:54
(8) Пффф
Берем http://dependencywalker.com/
Открываем в нем вашу Либу.
Если видим 4 функции
DllUnregisterServer
DllRegisterServer
DllCanUnloadNow
DllGetClassObject

- натравливаем на нее regsvr32, в реестре ищем progID по имени либы и создаем в 1С
Новый ComОбъект(ProgID)

Вопрос в другом - знаем ли мы методы и параметры?
10 lEvGl
 
гуру
14.08.13
16:54
(7)"Нет" - про 1с или студию?
(9)Да, дока есть
11 lEvGl
 
гуру
14.08.13
16:56
(8)не кинете ссылкой?
12 Dimasik2007
 
14.08.13
16:56
Да я итолько и хотел написать, что еще можно COM=объект заюзать
13 Dimasik2007
 
14.08.13
16:59
(11) Сейчас не найду, все уже под решения переделаны.
Если писать свой ком-объект, то наподобие:

using System;
using System.Collections.Generic;

using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace MyComponent
{
    /// <summary>
    /// Description of MyClass.
    /// </summary>
    [ComVisible(true), Guid("D6B74891-2223-4E57-A0A9-A48064625600"), ProgId("AddIn.MyNetComponent")]
    public class MyClass
    {
        
            public void ShowMessage(string MyMessage)
            {
                MessageBox.Show(MyMessage, "", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
            }
        
    }
}



и в 1С:

ПрогИД = "AddIn.MyNetComponent";
    ПодключитьВнешнююКомпоненту(ПрогИД);
    МояБиблиотека = Новый COMОбъект(ПрогИД);
    МояБиблиотека.ShowMessage("Привет");
14 бомболюк
 
14.08.13
16:59
(9) там какой то *.tlb лежит, может в нем есть?
15 Dimasik2007
 
14.08.13
17:03
(0) А так, вообще не понятно, что именно хотите сделать.
Если одностороннее 1С -> DLL, то COMОбъект
если наоборот (внешние события), то хз, можно ли это сделать на СОМ.
16 lEvGl
 
гуру
14.08.13
17:06
(15) да, вполне достаточно вызвать метод из библиотеки;
ком создается, щас методы проверю...
17 lEvGl
 
гуру
14.08.13
17:12
ну все ок, работает вроде, всем Огромное спасибо!
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан