|   |   | 
| 
 | 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 | 
        ну все ок, работает вроде, всем Огромное спасибо!     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |