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