Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Зависание процесса в памяти, 1С 
V
    Опции темы
DrunkProgrammer
Дата 24.4.2008, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 23.10.2007
Где: Омск

Репутация: 1
Всего: 1



В общем продолжаю писать компоненту для 1С  smile . После закрытия 1С, сам процесс 1cv7.exe остается висеть в памяти. 
Я уже и присваивал переменным null и Marshal.Release(Marshal.GetIDispatchForObject(Объект)) использовал и GC.Collect();
  GC.WaitForPendingFinalizers();, а 1С-ка собака все равно висит.  smile 
PM MAIL   Вверх
_hunter
Дата 24.4.2008, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 2
Всего: 98



этот вопрос проще на форуме 1C-ников задать -- вряд ли проблема специфична для шарпа...

Добавлено через 2 минуты и 54 секунды
кстати вот:
http://www.kb.mista.ru/article.php?id=62


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
DrunkProgrammer
Дата 24.4.2008, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 23.10.2007
Где: Омск

Репутация: 1
Всего: 1



Этот косяк появляется, когда использую свою компоненту.
PM MAIL   Вверх
Veitmen
Дата 24.4.2008, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 288
Регистрация: 10.11.2006
Где: СПБ

Репутация: 3
Всего: 4



Я конечно профан в вопросах с 1С... Но нельзя просто процесс убить?

Это сообщение отредактировал(а) Veitmen - 24.4.2008, 11:34
PM MAIL ICQ   Вверх
DrunkProgrammer
Дата 24.4.2008, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 23.10.2007
Где: Омск

Репутация: 1
Всего: 1



Его конечно можно просто убить, да только после каждого выхода из 1С "просто убивать" процесс - не есть нормально.
PM MAIL   Вверх
DrunkProgrammer
Дата 24.4.2008, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 23.10.2007
Где: Омск

Репутация: 1
Всего: 1



В общем разобрался smile.
Вот пример компоненты на C# для 1С 7.7 с получением и использованием 1С-оского класса:

Код

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

namespace AddIn
{
    [Guid(@"AB634001-F13D-11D0-A459-004095E1DAEA"),
    InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    public interface IInitDone
    {
        void Init([MarshalAs(UnmanagedType.IDispatch)] Object pConnection);
        void Done();
        void GetInfo([MarshalAs(UnmanagedType.SafeArray,
                SafeArraySubType = VarEnum.VT_VARIANT)] ref Object[] pInfo);
    }

    [Guid("AB634004-F13D-11D0-A459-004095E1DAEA"),
    InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    public interface IAsyncEvent
    {
        void SetEventBufferDepth(Int32 depth);
        void GetEventBufferDepth(ref Int32 depth);
        void ExternalEvent([MarshalAs(UnmanagedType.BStr)] String source,
                                     [MarshalAs(UnmanagedType.BStr)] String message,
                                     [MarshalAs(UnmanagedType.BStr)] String data);
        void CleanBuffer();
    }





    [ComVisible(true), ProgId(@"AddIn.ExcelReader"),
    Guid(@"9F0CF3B4-B799-4852-8293-9BB9500A3099"),
    ClassInterface(ClassInterfaceType.AutoDispatch)]
    public class ExcelReader : IInitDone
    {
        public static Object pCon = new object();

        public ExcelReader(){}
      
        public void Init([MarshalAs(UnmanagedType.IDispatch)] Object pConnection)
        {
            try
            {
                pCon = pConnection;
            }
            catch
            {
                throw new COMException(@"Unknown object context ");
            }
        }

        public void Done()
        {         
        }

        public void Test()
        {
            object obj1C = pCon.GetType().InvokeMember("AppDispatch", BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.Static, null, pCon, null);
            Object[] Args = new Object[1];
            Args[0] = "ТаблицаЗначений";
            object Object1C = obj1C.GetType().InvokeMember("CreateObject", BindingFlags.GetProperty, null, obj1C, Args);

            Args[0] = "Должность";
            Object1C.GetType().InvokeMember("НоваяКолонка", BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.Static, null, Object1C, Args);

            Args[0] = "Зарплата";
            Object1C.GetType().InvokeMember("НоваяКолонка", BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.Static, null, Object1C, Args);

            Object1C.GetType().InvokeMember("НоваяСтрока", BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.Static, null, Object1C, null);


            Object1C.GetType().InvokeMember("УстановитьЗначение", BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.Static, null, Object1C, new object[] { 1, "Должность", "Программер" });

            Object1C.GetType().InvokeMember("ВыбратьСтроку", BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.Static, null, Object1C, null);

            Marshal.Release(Marshal.GetIDispatchForObject(Object1C));
            Marshal.ReleaseComObject(Object1C);
        }



        public void GetInfo([MarshalAs(UnmanagedType.SafeArray,
        SafeArraySubType = VarEnum.VT_VARIANT)] ref Object[] pInfo)
        {
            pInfo[0] = @""; 
        }      
    }
}


Это сообщение отредактировал(а) DrunkProgrammer - 24.4.2008, 12:19
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0606 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.