Новая версия 1С:Предприятие 8.2 конфликтует с C# и .Net framework

Суть конфликта 1С 8.2 с C# и .Net framework в следующем. В версии 8.2 1С анонсировала новый способ написания внешних компонент 1С с использованием так называемого Native API. Самое интересное, что на C# предложенный подход реализовать невозможно, а реализация Native API на VC++/CLI теоретически возможна, но при попытке подключения DLL, скомпилированных с опцией /CLR, происходит зависание 1С (версия 8.2.13.202). Еще один конфликт – в новой версии 1С нет поддержки технологии ActiveX, на основе которой многие разработчики вставляли в формы 1С свои WinForms-приложения.


15.12.2010 13:37 (Elisy) Elisy 21 [+] [−] Перейти к публикации

Страницы: 1
1.
cool.vlad4 15.12.10 14:29 URL

Да-м жить становится интереснее...

2.
Magister 15.12.10 14:54 URL

Естественно, какой нафиг .NET может быть на Linux? Mono не предлагать. smile:D

3.
Ish_2 15.12.10 14:55 URL

Цитата
Заметка эта написана больше не для критики, а чтобы определить новую для определенного круга .Net-разработчиков проблему, попытаться донести ее до 1С и постараться совместно решить в текущей или новых версиях популярного продукта 1С:Предприятие 8.2.


Совместно решить ? с 1С ? - Ох, вряд ли.
Думаю , выкручиваться будет каждый разработчик ВК как сможет.
Разработчик ВК для 1с работает на свой страх и риск.
На свой страх и риск и действуют покупатели , покупающие такие ВК.
Такова жизнь.

4.
cool.vlad4 15.12.10 15:15 URL

того глядишь на java перейдем...шучу, но для многих, конечно неприятность, есть у кого-нибудь соображения на сей счет?

Изменено: cool.vlad4 - 15.12.10 15:17
5.
mirco 15.12.10 16:46 URL

думаю activeX или аналога точно не будет.
а вот nativeApi поправят, но конечно не скоро...

надо бы попробовать порисовать окна внутри 1с, может получиться придумать идею для замены activeX. Пока что я знаю только как всавить через поле html.

6.
Elisy 16.12.10 6:27 URL

Цитата
Совместно решить ? с 1С ? - Ох, вряд ли.
Думаю , выкручиваться будет каждый разработчик ВК как сможет.
Разработчик ВК для 1с работает на свой страх и риск.
На свой страх и риск и действуют покупатели , покупающие такие ВК.
Такова жизнь.

Я думаю, достаточно постараться решить силами заинтересованных разработчиков. Проблема общая.
Как я понял в случае с C++/CLR происходит, скорее всего, Loader Lock. Как бороться пока не знаю. При отладке и остановке в отладчике выдается такой стек вызовов:
ntdll.dll!_RtlCompareMemoryUlong@12() + 0x10 bytes
ntdll.dll!@RtlpFreeHeap@16() + 0x10b bytes
ntdll.dll!_RtlFreeHeap@12() + 0xe37 bytes
ntdll.dll!_RtlDebugFreeHeap@12() + 0x1f9 bytes
ntdll.dll!@RtlpFreeHeap@16() + 0x34d58 bytes
ntdll.dll!_RtlFreeHeap@12() + 0xe37 bytes
kernel32.dll!_HeapFree@12() + 0x14 bytes
> clr.dll!EEHeapFree() + 0x22 bytes
clr.dll!EEHeapFreeInProcessHeap() + 0x1e bytes
clr.dll!operator delete[]() + 0x30 bytes
clr.dll!ExecuteDLLForAttach() + 0x114 bytes
clr.dll!ExecuteDLL() + 0xc9 bytes
clr.dll!CorDllMainForThunk() + 0x6b bytes
mscoreei.dll!CorDllMainWorkerForThunk() + 0x74 bytes
mscoreei.dll!_VTableBootstrapThunkInitHelper@4() + 0x1d bytes
mscoreei.dll!_VTableBootstrapThunkInitHelperStub@0() + 0xc bytes

или

> clr.dll!SString::CaseCompareHelper() + 0x2a bytes
clr.dll!SString::EqualsCaseInsensitive() + 0x34fa5 bytes
clr.dll!PEImage::PathEquals() + 0x16 bytes
clr.dll!DomainAssembly::FindIJWModule() - 0x10 bytes
clr.dll!AppDomain::FindIJWDomainFile() + 0x4e bytes
clr.dll!ExecuteDLLForAttach() + 0xc5 bytes
clr.dll!ExecuteDLL() + 0xc9 bytes
clr.dll!CorDllMainForThunk() + 0x6b bytes
mscoreei.dll!CorDllMainWorkerForThunk() + 0x74 bytes
mscoreei.dll!_VTableBootstrapThunkInitHelper@4() + 0x1d bytes
mscoreei.dll!_VTableBootstrapThunkInitHelperStub@0() + 0xc bytes

Может кому-то будет полезно

7.
Elisy 16.12.10 6:30 URL

Цитата
mirco пишет:

думаю activeX или аналога точно не будет.

а вот nativeApi поправят, но конечно не скоро...



надо бы попробовать порисовать окна внутри 1с, может получиться придумать идею для замены activeX. Пока что я знаю только как всавить через поле html.

Обходные пути можно поискать, но хотелось бы по возможности к NativeAPI подстроиться

8.
gilv 16.12.10 15:41 URL

занимаетесь какой-то ******!

Ответили: (9)

9.
cool.vlad4 16.12.10 17:17 URL

smile:?: (8)
PS пойду заниматся делом...читать http://forum.infostart.ru/forum24/topic37122/

Изменено: cool.vlad4 - 16.12.10 17:18
10.
v77 16.12.10 22:47 URL

Автору приснилось, что 1С должна работать с .NET, с которым никогда не собиралась работать.

Ответили: (11)

11.
cool.vlad4 17.12.10 0:14 URL

(10) Может это разработчики 1С не стремятся, ...не знаю что там тебе приснилось, ты публикации автора видел? Elisy .Net Bridge например?

Ответили: (16)

Изменено: cool.vlad4 - 17.12.10 0:16
12.
Elisy 17.12.10 6:26 URL

Цитата
gilv пишет:
занимаетесь какой-то ******!

Действительно занимаюсь ****** вместо компании 1С. Пока не отчаялся. А вот эти люди уже отчаялось и ничего хорошего от 1С не ждут:
http://www.rsdn.ru/forum/dotnet/4081994.aspx

Ответили: (15)

13.
Elisy 17.12.10 6:34 URL

Цитата
v77 пишет:
Автору приснилось, что 1С должна работать с .NET, с которым никогда не собиралась работать.

Автор не понял 1С. Внешние компоненты нацелены в первую очередь на разработчиков. Сообщество .Net-разработчиков намного больше, чем сообщество 1С-разработчиков. И .Net-разработчиков больше, чем С++ - разработчиков.
Я не прошу полноценной поддержки .Net в 1С, но ПодключитьВнешнююКомпоненту(ProgId) в сервере 8.2 можно же было оставить, как оставили его в клиенте 8.2. Проблем бы стало намного меньше.

14.
Elisy 17.12.10 8:09 URL

Интересный вопрос: почему новая технология Native API уступает старой технологии COM отсутствием доступа к методам глобального контекста (AppDispatch)? Ведь все новое должно быть лучше старого...

15.
Ish_2 17.12.10 8:16 URL

(12) "Пока не отчаялся. А вот эти люди уже отчаялось и ничего хорошего от 1С не ждут:"

Не то чтобы я был на стороне тех кто отчаялся,НО:
Занимая монопольное положение на своем рынке , почему "1с" должна заботиться о .net-разработчиках ?
С какой стати ?
Что -то мне подсказывает , что при разработке нового релиза "1с" меньше всего думает о .net-разработчиках,
много их или мало.
Сколько решений на 1с , использующих .net ? - Оптимистичный ответ 0.5% !
Видя соотношение 99.5% против 0.5%, человек принимающий решение , вздохнет :
".net-разработчиков , конечно , жаль"

Изменено: Ish_2 - 17.12.10 8:28
16.
v77 17.12.10 8:42 URL

(11) Я не фанат .NET и мне эти бриджи и обиды на 1С по барабану.
NativeAPI сделан для С++ и с учетом того, что будет использоваться на Linux.
А ваши свистелки с пирделками 1С не обязана поддерживать. Колупайтесь сами. Кстати, могу за деньги прикрутить ваш .NET к NativeAPI.

Ответили: (19)

17.
Elisy 17.12.10 10:13 URL

Цитата
v77 пишет:
Кстати, могу за деньги прикрутить ваш .NET к NativeAPI.

Хорошая идея. Готов оплатить "прикручивание" в пределах разумного для последующей общедоступной публикации. Решение должно быть на C# или VC++/CLR, подключаться по технологии Native API (не COM) из 1С 8.2 (Сервер) (без workaround`ов) с реализацией интерфейсов IComponentBase, IInitDoneBase, ILanguageExtenderBase, LocaleBase. Для простоты можно на основе примера с таймером от 1С NativeAPI. Без зависаний при вызове ПодключитьВнешнююКомпоненту из макета.
Сколько это будет стоить и в какой срок?

Ответили: (18) (22)

18.
v77 17.12.10 10:37 URL

(17) А что такое workaround?

19.
cool.vlad4 17.12.10 10:39 URL

(16) По моему занятие фанатства надо оставить болельщикам футбола и иже с ними, а в делах сугубо рабочих, в зависимости от задачи, от того кому что удобней, ... ну и от привычки...насчет прикручивания неплохо бы, но меня это интересует пока лишь с точки зрения любопытства, поскольку задачи на 8.2 такой не стоит. Насчет того, что 1С определяет политику своих разработок сама

Цитата
А ваши свистелки с пирделками 1С не обязана поддерживать
- согласен.

Ответили: (20)

20.
cool.vlad4 17.12.10 10:44 URL

(19) Быть может это обходной прием?

Ответили: (21)

21.
v77 17.12.10 11:04 URL

(20) Ну как тут обойтись без обходных приёмов, если нужно скрестить .NET и native. Первое, что приходит в голову - это сделать прокладку в виде обычной DLL, которая будет подключать остальные ВК, и NativeAPI и обычные. Это будет workaround?

Ответили: (23) (24)

22.
Elisy 17.12.10 12:05 URL

Цитата
v77 пишет:
(17) А что такое workaround?

Workaround - обходной путь.
Например, обходным путем считается на сервере 8.2 обойти зависания Native API через написание отдельной DLL (без CLR), которая реализуя Native API будет возвращать ссылку void* pConnection из метода bool CAddInNative::Init. Далее ее можно передать уже в COM-объект на C# или VC++/CLR и получить полноценный ВК. По сути ВК - это самописный компонент плюс ссылка на pConnection.
Для такого варианта будет код:

&НаСервере
...
ПодключитьВнешнююКомпоненту("ОбщийМакет.NativeAPI", "NativeAPI", ТипВнешнейКомпоненты.Native);
AddIn = Новый("AddIn.NativeAPI");
intPtr = AddIn.GetConnectionIntPtr();
o = Новый COMОбъект("CSharp.COM");
o.SetConnection(intPtr);

В результате получим C#-объект на стороне сервера со ссылкой на Connection. Результат достигнут, но нужно, чтобы в одной dll (VC++/CLR) была реализация NativeAPI + .Net.

23.
Elisy 17.12.10 12:08 URL

(21) Извиняюсь, не заметил комментария - это будет обходной путь. Мне бы хотелось идеала достигнуть без лижних компонентов и кода.
ActiveX через Html, NativeApi - через свою dll - это не то, что хотелось бы видеть в "любимой" 1С.

Ответили: (25)

Изменено: Elisy - 17.12.10 12:09
24.
cool.vlad4 17.12.10 12:09 URL

(21) наверное нет, хотя как на это посмотреть - все таки реализация не напрямую (23) по моему это совсем не простая задача...

Изменено: cool.vlad4 - 17.12.10 12:12
25.
v77 17.12.10 12:26 URL

(23) Если варианты с прокладками не катят, то тогда два варианта.

1) Занести пару-тройку миллионов долларов в микрософт, чтобы они переделали .NET
2) Занести пару-тройку миллионов рублей в 1С, чтобы они переделали NativeAPI

Ответили: (27)

26.
cool.vlad4 17.12.10 12:48 URL

Есть еще 3-й вариант пару-тройку сот рублей в пивбар, и не парится...конец недели все таки...
ЗЫ про пару тройку, миллионов, - можно просто придти в микрософт и они переделают под заказ? ...следующая версия платформы dot net Abramovich
или 1Ё от Прохорова - который работает на альтернативном источнике мыслей

Ответили: (29)

Изменено: cool.vlad4 - 17.12.10 12:55
27.
Elisy 17.12.10 13:04 URL

(25) smile:) Я отправил запрос разработчикам 1С - посмотрим, что ответят ))))))

28.
cool.vlad4 17.12.10 13:05 URL

(28) smile:D гораздо эффективнее будет отправить письмо с жалобой президенту Белоруссии "Как пропатчить NativeAPI"
ЗЫ Я сначала подумал был отправлен запрос из (25) - чуть со стула не упал...

Ответили: (28)

Изменено: cool.vlad4 - 17.12.10 13:06
29.
Elisy 17.12.10 13:05 URL

(26) Действительно - пятница smile:) - нужно успокоиться. Поздравляю всех с выходом 1С 8.2 smile:). Обходные пути мы придумаем - не первый раз smile:). А потом и перепишем 1С, как нужно.

30.
steban 17.12.10 17:19 URL

Как задолбали эти "специалисты"
http://zalil.ru/30163183

Ответили: (31) (63) (66)

Изменено: steban - 17.12.10 17:34
31.
cool.vlad4 17.12.10 17:34 URL

(30) неужели это то о чем я думаю ... addinnative...хм...
ЗЫ как быстро исполняются...хочу ВК самогенерирующую код... smile:D

ЗЫ Дай пожалуйста описание, а то кот в мешке...или это просто демонстрация ВК на 8.2, говорящая "нет"...

Изменено: cool.vlad4 - 17.12.10 17:43
32.
steban 17.12.10 17:54 URL

Это выгрузка конфигурации в которой есть только общий макет с Native-API ВК (32-битная под винду).
ВК - это пример timer с ИТС, скомпилированый с ключом /clr.
Нормально грузится в тонком и толстом клиентах.

Ответили: (33)

33.
cool.vlad4 17.12.10 18:02 URL

(32) все это для верно для версии 8.2.13.202? у меня ее нет.

34.
steban 17.12.10 18:12 URL

скачай файлик заново

Код
Процедура TestNativeApi()
    УстановитьВнешнююКомпоненту("ОбщийМакет.addinnative");
    Сообщить(ПодключитьВнешнююКомпоненту("ОбщийМакет.addinnative", "Timer", ТипВнешнейКомпоненты.Native));   
КонецПроцедуры

Процедура ПриНачалеРаботыСистемы()
   TestNativeApi();
КонецПроцедуры

1cver.png (31.02 КБ) [ Скачать ]
35.
steban 17.12.10 18:49 URL

на 8.2.13.202 тоже не виснет

Ответили: (36) (38) (63) (65)

36.
Elisy 18.12.10 6:14 URL

(35) Это радостное известие означает, что не все еще потеряно. Давайте теперь с ОС разберемся. Предполагаю, что у вас могло заработать на XP или 2003. Вот дословно параметры моего запроса в 1С:
1. ДАННЫЕ ТЕКУЩЕГО КОМПЬЮТЕРА И КОНФИГУРАЦИИ
Версия 1С:Предприятия 8.0: 8.2.13.202
Конфигурация: Тестовая
Версия конфигурации: -
Операционная система: Microsoft Windows 7

Могу добавить, включен UAC. Установлен .Net framework 4.

37.
cool.vlad4 18.12.10 9:56 URL

У меня - 8.2.12, Windows 7 x32, откл UAC, .Net Framework 4

38.
Elisy 18.12.10 10:11 URL

(35) Происходит зависание

Ответили: (68)

Hang.JPG (49.78 КБ) [ Скачать ]
39.
Elisy 21.12.10 13:59 URL

Только что пришло сообщение от 1С:
Цитирую:
"Просто включить опцию компилятора /clr недостаточно.
Т.к. платформа взаимодействует с неуправляемым кодом, то дополнительно нужно применять директивы #pragma managed(push, off) #pragma managed(pop) #pragma unmanaged Это объясняется несовпадением C/C++ ABI с ABI управляемого кода.

Так,в файле AddInNative.cpp из примера, перед функцией long GetClassObject(const WCHAR_T* wsName, IComponentBase** pInterface) нужно добавить директиву #pragma unmanaged

в файле AddInNative.h, после #define __ADDINNATIVE_H__ нужно добавить #pragma managed(push, off), а перед #endif //__ADDINNATIVE_H__ #pragma managed(pop)
"
Постараюсь побыстрее проверить

Ответили: (40) (58) (63) (65)

40.
Elisy 22.12.10 12:18 URL

(39) Работает. Принцип такой, что хотя весь проект и компилируется с опцией CLR, но на модуль AddInNative эта настройка не распространяется. Как развивать еще не думал, но этого достаточно, чтобы цивилизованно выдавать сообщение при попытке подключения по Native API: "Native API не поддерживается!" smile:)

41.
Душелов 23.12.10 12:21 URL

Все прекрасно работает и на последнем релизе. И визуальные ActiveX на управляемых формах в тонком клиенте, и обычные ВК.
Не вижу никаких проблем.

Ответили: (44) (45)

42.
Душелов 23.12.10 12:38 URL

Толстый клиент обычное приложение

43.
Душелов 23.12.10 14:16 URL

Проверено на XP, Win 7 (32 и 64 бита)

44.
Elisy 23.12.10 14:18 URL

(41) Кому нужен толстый клиент на 8.2? Есть хороший и проверенный толстый клиент 8.1. Речь идет о тонком и веб-клиенте.

Ответили: (48)

45.
Elisy 23.12.10 14:23 URL

(41) Могу явно указать проблемы. ActiveX, наверное, штатными средствами проигрываются на управляемых формах 1С? А обычные ВК из 8.1 заработали вдруг невероятным образом на сервере 8.2?

Ответили: (47)

46.
Elisy 23.12.10 14:24 URL

Кому интересно: здесь параллельное обсуждение на mista.ru
http://www.forum.mista.ru/topic.php?id=522583

47.
Душелов 23.12.10 14:31 URL

(45) Обычные ВК преспокойно работают на сервере 8.2
Технология управляемых форм не позволяет использовать ActiveX-ы. Потому и используются контейнеры, типа поля html-документа, как описано у меня в статье.

Ответили: (51) (52)

48.
Душелов 23.12.10 14:32 URL

(44) Толстый клиент нужен для типовых БП, ЗУП и УПП, которые еще не переведены полностью на управляемые формы.

Ответили: (53)

49.
Душелов 23.12.10 14:33 URL

Да и по статье - я так и не понял, где новая версия 8.2 конфликтует с C# и .NET

50.
Душелов 23.12.10 14:45 URL

Те же WPF контролы на WinForms-ах в .NET-е используются через контейнер.
Так что это не политика 1С. Это технологии...

51.
Elisy 24.12.10 7:52 URL

(47) Да, как это они работают на сервере 8.2? Можно ссылку на пример такого компонента? Насколько я знаю,
Вот что пишет Радченко:
"Вообще, в синтакс-помощнике описаны два варианта синтаксиса ПодключитьВнешнююКомпоненту():
1. ПодключитьВнешнююКомпоненту(<Местоположение>, <Имя>, <Тип>)
2. ПодключитьВнешнююКомпоненту(<ИдентификаторОбъекта>)
К сожалению дальше есть особенность, которая там не описана, но мы это исправим.
Первый вариант синтаксиса можно использовать и на клиенте, и на сервере и во внешнем соединении.
Второй вариант синтаксиса можно использовать только на клиенте."
Это значит, что на сервере работают только ВК, написанные по технологии NativeAPI. Подскажите мне, пожалуйста, как на C# повторить технологию NativeAPI, подобно примеру 1С на C++.

52.
Elisy 24.12.10 7:53 URL

(47) Я пишу в статье:
"Я не хочу сказать, что больше не осталось способов работать с .Net-проектами из 1С, я хочу показать, что новая версия 1С недружелюбно относится к .Net, ограничивая поддержку и переводя свои API на заведомо неподдерживаемый формат."

Ответили: (55)

53.
Elisy 24.12.10 7:55 URL

(48) А когда будут переведены БП, ЗУП и УПП - это вопрос времени - что прикажете делать? А что делать сейчас касательно УТ11?

Ответили: (54)

54.
Душелов 24.12.10 10:45 URL

(53) Для работы в контексте сервера, еще со времен 8.1 (в регламентных заданиях) я использую ActiveX-ы.

55.
Душелов 24.12.10 10:53 URL

(52) Новая версия - это "8.2" или "8.2.13.202" ?

Ответили: (58)

56.
Душелов 24.12.10 10:53 URL

+55 в заголовке указано "конфликтует" - конфликтов не заметил

Ответили: (58)

57.
Душелов 24.12.10 11:00 URL

Цитата
Мне тоже известны пути вставки ActiveX на управляемые формы 8.2. Но согласитесь, технологию такой вставки нужно рассматривать как обходной путь (workaround). Так как работу выполняет не 1С, а IE.


Зачем пихать все ActiveX-ы на форму?

В 90% случаев достаточно использовать конструктор "Новый COMОбъект()". И все прекрасно работает и на сервере, и на клиенте, и на веб-клиенте.

Ответили: (59) (62)

58.
Elisy 25.12.10 6:05 URL

(55) Новая версия - "8.2.13.202"
(56) Я заметил и разработчики 1С подтвердили: см. (39) . К сожалению - это не помогает, так как управляемый код из такой dll вызывать нельзя.
А проблема осталась - с тем же успехом 1С могло ответить - для нормальной работы примера, нужно убрать опцию /clr. Дело в том, что после предложенного решения 1С любое создание .Net-объекта сопровождается таким же зависанием. Например, вызов простого метода:

#pragma managed
void CAddInNative::InitializeManaged()
{
System::Object^ o = gcnew System::Object();
}
#pragma unmanaged

из методов CAddInNative::CallAsFunc или CAddInNative::Init
Проблема похожа на Loader Lock:
http://msdn.microsoft.com/en-us/library/ms173266(v=vs.80).aspx

59.
Elisy 25.12.10 6:12 URL

(57) Повторюсь - я веду речь о тонком клиенте и сервере 8.2.
1. Новый COMОбъект() создает COM-объект, а не ActiveX. ActiveX подразумевает визуаьлный компонент. Значит использование Новый COMОбъект() ограничено.
2. Если сравнивать использование NativeAPI и Новый COMОбъект() на сервере, то NativeAPI выиграет только за счет того, что подключение его кэшируется и он каждый раз не создается.
3. Внешние компоненты (NativeAPI и сделанные по старой технологии) имеют преимущество в том, что в них передается указатель на АПИ 1С. Это значит, например, что из ВК можно выдать сообщение в окно 1С, а из Новый COMОбъект() затруднительно. Из ВК можно вызвать метод глобального контекста (только для тонкого клиента), а из Новый COMОбъект() - тоже затруднительно.

60.
steban 25.12.10 15:51 URL

Цитата
Elisy пишет:
управляемый код из такой dll вызывать нельзя

можно

Ответили: (63) (66)

61.
steban 25.12.10 15:54 URL

1С с C# не конфликтует.
Автор конфликтует с головой.

Ответили: (64)

62.
Душелов 25.12.10 21:44 URL

Цитата
Elisy пишет:

(57) Повторюсь - я веду речь о тонком клиенте и сервере 8.2.
1. Новый COMОбъект() создает COM-объект, а не ActiveX. ActiveX подразумевает визуаьлный компонент. Значит использование Новый COMОбъект() ограничено.
2. Если сравнивать использование NativeAPI и Новый COMОбъект() на сервере, то NativeAPI выиграет только за счет того, что подключение его кэшируется и он каждый раз не создается.
3. Внешние компоненты (NativeAPI и сделанные по старой технологии) имеют преимущество в том, что в них передается указатель на АПИ 1С. Это значит, например, что из ВК можно выдать сообщение в окно 1С, а из Новый COMОбъект() затруднительно. Из ВК можно вызвать метод глобального контекста (только для тонкого клиента), а из Новый COMОбъект() - тоже затруднительно.


1. ActiveX - не ком-объект? Ничем не ограничено. Работает, как на сервере, так и на клиенте. И не один год уже. И на всех платформах.
2. Каждый раз можно не создавать. У меня в статье описано хранение 1 объекта без создания каждый раз нового элемента.
3. У комобъекта прекрасно используются события, с помощью которых можно что угодно выводить и показывать в 1С.

63.
Elisy 27.12.10 6:12 URL

(60) Если это из той же оперы, что и (30), то почитай ответ от 1С, которая фактически признала проблемы взаимодействия управляемого и неуправляемого кода в (39). Я повторюсь, что это решение зависает на 1С 8.2 см (35). А если это решение у одних зависает, а у других - нет, то это нестабильное решение, которое в нормальный продукт не вставишь.

64.
Elisy 27.12.10 6:15 URL

(61) Значит Steban объединяются с Душелов и пишут опровержение на статью "Новая версия 1С:Предприятие 8.2 конфликтует с C# и .Net framework". А то, получается, 20 человек поддерживают, а у 2х человек аргументов не хватает, начинают на личности переходить.

65.
steban 27.12.10 9:30 URL

Цитата
Elisy пишет:
почитай ответ от 1С, которая фактически признала проблемы взаимодействия управляемого и неуправляемого кода в (39).

Ничего они не признали. Они намекнули тебе, что проблема лежит за пределами кода 1с, и намекнули где искать решение.
А потом намекнули еще раз более прозрачно (чтобы даже тебе было понятно):
Цитата
Из 1С пришел ответ:
"Технические вопросы совместного использования управляемого и неуправляемого кода правильней задавать компании-производителю.
Специалисты компании 1С не имеют доступа к исходным кодам платформы .NET для детального анализа причин неработоспособности."



Цитата
Я повторюсь, что это решение зависает на 1С 8.2 см (35). А если это решение у одних зависает, а у других - нет, то это нестабильное решение, которое в нормальный продукт не вставишь.

Та хамишь, и при этом еще хочешь чтобы я тебе дал "стабильное решение". А мне лень тратить свое время на решение твоих проблем.
Я хочу, чтобы до тебя дошла простая мысль: "описанное зависание - не проблема 1с и не проблема microsoft, а проблема твоего кода. И в твоих силах это исправить, если вникнуть в тему поглубже, а не орать на весь интернет что 1с с чем-то там конфликтует"

Ответили: (67)

66.
steban 27.12.10 9:44 URL

Цитата
Elisy пишет:
А то, получается, 20 человек поддерживают, а у 2х человек аргументов не хватает, начинают на личности переходить.

20 плюсиков означают примерно следующее: кому-то из плюсанувших интересна тема "1с + .NET", кому-то интересна тема NativeAPI, кто-то считает что "1с--сакс". Я уверен, что никто из них не писал на C++/CLI.
А насчет аргументов... Я считаю, что достаточно (30) и (60)

Ответили: (69) (70)

67.
Elisy 27.12.10 10:18 URL

(65)

Цитата

Та хамишь, и при этом еще хочешь чтобы я тебе дал "стабильное решение". А мне лень тратить свое время на решение твоих проблем.
Я хочу, чтобы до тебя дошла простая мысль: "описанное зависание - не проблема 1с и не проблема microsoft, а проблема твоего кода. И в твоих силах это исправить, если вникнуть в тему поглубже, а не орать на весь интернет что 1с с чем-то там конфликтует"

Где я написал, что хочу лично от тебя чего-либо. Я так понимаю, ты предложил решение, оно таким же образом зависает, как и мое. Спасибо, конечно, но этого я и сам достиг. В моих силах было найти в отладчике при зависании при инициализации CLR в методе Init:
ntdll.dll!_RtlEnterCriticalSection@4() + 0x17 bytes
ntdll.dll!_LdrLockLoaderLock@12() + 0x6b bytes
А это значит, что каким-то образом проблема относится к проблеме Loader Lock. Отрицательный результат - тоже результат. Виноват мой код, 1С или Microsoft, меня это уже мало интересует. Сейчас для меня становится очевидным, что нужно искать обходной путь.

68.
Elisy 27.12.10 10:20 URL

(68) Для меня достаточно контраргументов (38) и ответа от 1С. Засим и разойдемся.

Ответили: (68) (71)

69.
cool.vlad4 27.12.10 10:39 URL

Действительно, конструктивного диалога не получается, хотя steban и Душелов, в общем-то правы, описанной проблемы не наблюдал, а порывшись в интернете, набрел на автора этой публикации. На C++/CLI не писал, так, что (66) близок к истине, (хотя писал на шарпе). Так, что склоняюсь к мысли, что тестить надо больше, приводить проблемный код, а то говорить получается, то не о чем. Соглашусь с Гилевым (8).

Изменено: cool.vlad4 - 27.12.10 10:41
70.
artbear 27.12.10 12:06 URL

Поддержу (66) - ИМХО именно такой расклад и есть smile:(

71.
steban 27.12.10 12:20 URL

(68)Блин, опять одно нытьё smile:(

Vista sp2 32-бит, 1c 8.2.13.202, .NET Framework 4, UAC включен - 1с при загрузке компоненты не виснет и managed-код выполняется.
Win7 64-бит, 1c 8.2.13.202, .NET Framework 4, UAC включен - 1с при загрузке компоненты не виснет и managed-код выполняется.

Ответили: (72)

72.
Elisy 27.12.10 12:44 URL

(71) Ты думаешь, я тебе не доверяю? Я верю тебе, что у тебя работает. Я верю cool.vlad4. Но твое решение постоянно(не временами) виснет у меня на машине также, как и мое. Ты можешь сейчас гарантировать стабильность такого решения всем разработчикам? Я нет. Допускаю, что влиять могут другие программы, вроде, антивируса на моей машине. Но как выявить, пока себе не представляю. По возможности при проверке все их отключил. При этом пример без опции CLR работает нормально - не зависает.

73.
steban 27.12.10 12:59 URL

Цитата
Elisy пишет:
Но как выявить, пока себе не представляю.

Ну! Давай! осталось сделать маленький шажок - попросить у меня исходники.

Ответили: (75)

74.
cool.vlad4 27.12.10 13:06 URL

(73) Я прошу smile:D хочется же узнать в чем причина этого загадочного зависания, вдруг это заразно и у меня начнет виснуть smile:D

Ответили: (74)

Изменено: cool.vlad4 - 27.12.10 13:06
75.
Elisy 27.12.10 13:14 URL

(73) Steban, мне не нужны твои исходники и не были нужны. Повторяю, твое решение у меня на машине не работает.

76.
steban 27.12.10 13:20 URL

(75)но ведь хочется понять почему именно не работает?

Ответили: (76) (77) (78)

Изменено: steban - 27.12.10 13:21
77.
Elisy 27.12.10 13:29 URL

(76) Хочется, не спорю. Но хочется узнать у того, чье решение у меня стабильно выполняется. Твое решение у меня зависает. Могу дать удаленный доступ, чтобы ты сам удостоверился, чтобы закрыть эту тему.

78.
Ish_2 27.12.10 14:49 URL

(76) ОФФ.Может быть, выяснить всё спокойно , без перехода на личности ?

Ответили: (79)

79.
Elisy 28.12.10 6:21 URL

(78) Полностью поддерживаю. Прошу прощения, если кого-то непреднамеренно обидел своими высказываниями. Честное слово, никого обидеть не хотел и старался не переходить на личности.

80.
awk 13.01.11 12:26 URL

Не привык пакостить исподтишка. Так что минус обосную:

1С решает определенный круг задач. И в описание этого круга задач поддержка .net не входит. Есть некий интерфейс позволяющий расширить круг задач, но это уже не к 1С, а к тем, кто расширяет. NativeAPI - достаточен для расширения, кроссплатформенный и хорошо документирован.

81.
Elisy 13.01.11 13:10 URL

Цитата
awk пишет:
1С решает определенный круг задач. И в описание этого круга задач поддержка .net не входит.

Какой бы круг задач не решала 1С, ее функционал очень ограничен и во многих задачах требует расширения другими средствами. Чисто прагматически 1С только выиграет, если будет дружно работать с .Net/Java и др. популярными платформами.
Цитата
awk пишет:
Есть некий интерфейс позволяющий расширить круг задач, но это уже не к 1С, а к тем, кто расширяет. NativeAPI - достаточен для расширения, кроссплатформенный и хорошо документирован.

Наверное, мы с вами с разным NativeAPI работаем.
NativeAPI мне показался ущербным по сравнению с COM ВК, так как не поддерживает IDispatch (или схожего метода доступа) и доступ к глобальному контексту через AppDispatch. И можно ссылку на хорошую документацию по использованию в MS IE, где был бы описан загадочный интерфейс IAddInServiceEx? Похоже продуманность и кроссплатформенность NativeAPI закончилась с поддержкой IE, где доступ осуществляется все через тот же одноплатформенный COM.

82.
cool.vlad4 13.01.11 13:13 URL

Насчет документации (81) поддерживаю - было бы очень хорошо awk, если бы вы выложили ссылки...я бы плюс поставил...
ЗЫ А к кому обращатся по поводу мелких недочетов на сайте? К support-у? - 1. При ошибочной ссылке на самого себя (например (81) ), после изменения оной ошибки - внизу ссылка так и остается (82) к примеру. 2. При добавлении цитат в комментарий, не отображается поле ссылок на ответы к комментарию. Это все мелочи, но просто, если уж есть такие фичи, то пускай без багов.

Ответили: (83)

Изменено: cool.vlad4 - 13.01.11 13:19
83.
Alraune 13.01.11 13:20 URL

(82) В техподдержку: http://infostart.ru/profile/support/

84.
japopov 24.02.12 19:19 URL

а вот никто не подумал, что поддержки .Net нет и быть не может, исходя из самой концепции управляемого приложения? Вот что априори знает сервер 1С о клиенте? Да неизвестно даже, на какой оси он крутится, в каком режиме работает! А любители .Net, покажите мне, как можно создать программу, которая, выполняясь на сервере, найдёт ваш .Net на клиенте (ага, на веб-клиенте, на линуксе, или, что уж там - давайте уж сразу на MeeGo).
Или вы хотите выполнять код на сервере и кидать на клиент результат? Тогда вам нужен VNC, а не 1С.
или вы хотите выполнять код на клиенте, с прямым доступом к ресурсам компьютера? Тогда вам с 1С вообще не по пути, используйте 1Сv77.

Ответили: (85)

85.
Elisy 27.02.12 7:38 URL

(84) japopov,

Цитата
а вот никто не подумал, что поддержки .Net нет и быть не может, исходя из самой концепции управляемого приложения? Вот что априори знает сервер 1С о клиенте? Да неизвестно даже, на какой оси он крутится, в каком режиме работает! А любители .Net, покажите мне, как можно создать программу, которая, выполняясь на сервере, найдёт ваш .Net на клиенте (ага, на веб-клиенте, на линуксе, или, что уж там - давайте уж сразу на MeeGo).

Можно много рассуждать о теории и универсальности. Но сейчас на практике сервер и клиенты традиционно на Windows. И намного качественнее охватить эти 95% клиентов, чем делать непротестированные в должной мере сообществом решения на все случаи жизни и разные ОС.
Цитата
Или вы хотите выполнять код на сервере и кидать на клиент результат? Тогда вам нужен VNC, а не 1С.
или вы хотите выполнять код на клиенте, с прямым доступом к ресурсам компьютера? Тогда вам с 1С вообще не по пути, используйте 1Сv77.

Ничто не помешает обмениваться клиенту .Net с .Net-сервером через простые объекты или строковые сериализации. Также, как и сейчас обменивается клиент и сервер через вызов серверных функций и процедур. Достоинство 1С в том, что оно в первую очередь десктопное приложение с прямым и тем самым более быстрым доступок к ресурсам компьютера.

Ответили: (86) (88)

86.
japopov 27.02.12 13:29 URL

(85) Elisy, Невозможность использовать .Net и вообще OLE, ActiveX - это следствие выбранной реализации (управляемое приложение, а точнее, его самая универсальная реализация - тонкий клиент). Увы, искать обходные решения (это не так уж сложно, я же нахожу %) ).

И таки да, для Вас будет сюрпризом - 1С уже давно постепенно отказывается от поддержки именно Microsoft в сторону большей универсальности. Вы просто не успеваете за 1С...

Ответили: (87)

87.
Elisy 27.02.12 16:37 URL

(86) japopov, все находят обходные решения. Статья говорит о том, что 1С некорректно работает с CLR С++ -приложениями и не более того. Все попытки связаться с разработчиками компании 1С закончились простыми отписками.
То, что делает 1С, может не идти с традиционным распространенным подходом и 1С будет вынуждена считаться с этим. Так, например, не убрала поддержку внешних компонент, написанных для 1С 8.1 или оставила работу с КОМ-объектами.

Ответили: (88)

88.
Magister 28.02.12 2:59 URL

(85) У нас вот сервер под Linux + PostgreSQL, например. Клиенты - да, под Windows.

(87) А смысл убирать то, что работает? Только вот, если таки будет в 8.2.16 полноценная платформа под Linux - там уж точно не будет ни COM-объектов, ни внешних компонент 7.7/8.0/8.1-style.
И думается мне, что немало организаций тогда выберет Linux для рабочих мест пользователей, как минимум из-за более высокой защищенности от вирусов и бесплатности.

А отписки - как раз очень хорошо свидетельствуют о том, что для 1С поддержка CLR - это не приоритетная задача. Не работает, ну и фиг с ним. Не нужно. По крайней мере, судя по вашим словам, так оно и есть с точки зрения 1С.
И нам с вами придется с этим считаться, либо уходить на другую платформу.
Я предпочту считаться. К тому же, кросс-плаформенность для приложений - это всегда плюс, как с точки зрения отлаженности софта (больше различных конфигураций для тестирования => большее количество выявленных багов), так и с точки зрения захвата рынка.

89.
a_mironov 12.03.12 2:37 URL

Hello всем. Есть проблема зависания, тема тут вроде об этом идёт. Пишу вменяемый почтовый клиент (ВК 1с 8.2) для IMAP+SMTP+SSL+TLS на c#. Долго решал проблему (при первой отправке письма через ВК она не возникает, зато при второй - сразу висит намертво), в итоге выяснилось, что сразу после второго вызова метода отправки вызывается IInitDone.Done(). Пока копаюсь дальше. Будет результат - отпишусь. Есть мысли, что проблема в том, что у clr остаются ссылки на объекты 1С... копаюсь в общем

Ответили: (90) (91)

Изменено: a_mironov - 12.03.12 2:40 (пунктуация ))
90.
a_mironov 12.03.12 2:53 URL

(89) так и есть, проблема с методом GC.WaitForPendingFinalizers(). 1С запаздывает с освобождением памяти? Или что? В любом случае, очистку грехов вроде мусора пока оставляю на потом. Клиент ждёт ) найду решение, приемлемое для юзера и кодера - отпишусь тут. Кстати, чтобы ВК не висла при открытии, нужно записать нечто подобное (для c#)
public static object V8Object
{
get
{
return m_V8Object;
}
set
{
m_V8Object = value;
m_ErrorInfo = (IErrorLog) value;
m_AsyncEvent = (IAsyncEvent) value;
m_StatusLine = (IStatusLine) value;
m_IExtWndsSupport = (IExtWndsSupport)value;
}
}

91.
Elisy 13.03.12 7:36 URL

(89) a_mironov,
Отлично, что есть еще одно подтверждение о зависании. А то стал думать, что только у меня такие проблемы, связанные с индивидуальными настройками системы. Ведь, судя по постам steban и cool.vlad4, у них зависания не происходит.

92.
a_mironov 13.03.12 10:40 URL

всё это частные случаи. зависания связаны чаще всего с разницей в подходах к очищению мусора в 1С Технология внешних компонент (c++) и .net. вообще, я бы заколлекционировал случаи подвисания и поразбирался бы с ними. это дало бы ценнейший опыт. если висячая ВК?

Ответили: (93)

93.
Elisy 13.03.12 10:54 URL

(92) a_mironov,
Дальше, чем включение опции CLR в пример от 1С Технологии ВК дело не пошло. Уже на этом этапе было зависание.
Причем эксперименты с #pragma unmanaged тоже результатов особых не дали, насколько помню.
Сейчас пока не охота возвращаться к этой теме из-за того, что новая технология ВК менее гибкая, чем COM ВК (нет возможности работать с объектами, а только с примитивными типами).

Ответили: (94)

94.
a_mironov 13.03.12 10:56 URL

(93) Elisy, ок, я посмотрю сабж в переписке. Есть исходники? Кинь в скайп promironov

Ответили: (95)

95.
Elisy 13.03.12 11:35 URL

(94) a_mironov,
Исходников не осталось - прошло больше года с начала изучения. Выслал переписку с компанией 1С по этому вопросу.

96.
a_mironov 13.03.12 11:49 URL

начинаем глубокую тему изучения Native API :) на этой неделе делаю простенькую ВК, которая будет работать по этой технологии. будет результат - напишу статью. результата не будет - сделаем всеобщее обсуждение

97.
TeMochkiN 19.03.12 11:47 URL

Здравствуйте уважаемый Elisy. я вот нашел ваш .net bridge и пытался воспользоваться обработкой отсюда http://infostart.ru/public/60232/
вообщем ошибка происходит аж при загрузке внешней компоненты. у меня Windows 7 x64, платформа 1С 8.2.14.537, конфигурация "Управление торговлей" 10.3.14.5 (демка, но и не только на демке ошибка происходит), устанавливал .net bridge от имени администратора, путь к библиотеке в самой обработке менял, .net bridge версии 4.0.3.1 качал отсюда. эта ошибка происходит из-за описанной в данной теме проблемы? никак подключить эту компоненту на данной платформе не удастся? хотел просто испробовать многопоточность в 1С, но вот столкнулся с данной проблемой

Ответили: (98)

Изменено: TeMochkiN - 19.03.12 11:52
98.
Elisy 19.03.12 12:34 URL

(97) TeMochkiN,
Ошибка скорее всего происходит из-за того, что в
http://infostart.ru/public/60232/
используется .Net Bridge 3 - предыдущей версии.
Для исслдования многопоточности вам, думаю, проще взять версию 4.0.3.1 и воспользоваться публикацией
http://infostart.ru/public/104926/

Ответили: (99)

99.
TeMochkiN 19.03.12 14:27 URL

(98) Elisy, благодарю :)

Страницы: 1

21 [+] [−] Перейти к публикации