Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Внешние компоненты .net 7/8 (число прочтений - 2910 )
ku3mich
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 4
Зарегистрирован: 19. Октября 2010
Внешние компоненты .net 7/8
19. Октября 2010 :: 09:49
Печать  
Пишу ВК в 77 работает нормально ничего не повисает, в 81/82 наблюдается зависание процесса 8ки в памяти, бага вылазит при использовании свойства AppDispacth, т.е. как только получил ссылку 8ка не завершится, пишу на C# за последние сутки перерыл все что выдал гугл по AppDispatch и ВК советуют разное и Marshal.AddRef , и Marshal.Release/ReleaseComObject/FinalReleaseComObject

вот реализация IInitDone:
Код
Выбрать все
        public void Done() {
            //Marshal.Release(Marshal.GetIDispatchForObject(v7.App));
            //Marshal.FinalReleaseComObject(v7.App);
            //Marshal.Release(Marshal.GetIDispatchForObject(v7.Obj));
            //Marshal.FinalReleaseComObject(v7.Obj);

            //Marshal.ReleaseComObject(v7.App);
            //Marshal.Release(v7.pApp);

            v7.StatusLine = null;
            v7.ErrorLog = null;
            v7.ExtEvent = null;
            v7.App = null;
            //v7.Obj = null;

            GC.Collect();
            GC.WaitForPendingFinalizers();
        }
        public void Init([MarshalAs(UnmanagedType.IDispatch)] object pConnection) {
            if (!v7.initialized)
                try {
                    v7.Obj = pConnection;
                    //v7.App = v7.Obj.GetType().InvokeMember("AppDispatch", BindingFlags.GetProperty, null, v7.Obj, null);
                    //v7.pApp = Marshal.GetIDispatchForObject(v7.App);
                    //Marshal.AddRef(v7.pApp);
                    
                    v7.ExtEvent = (IAsyncEvent)pConnection;
                    v7.ErrorLog = (IErrorLog)pConnection;
                    v7.StatusLine = (IStatusLine)pConnection;
                    v7.initialized = true;
                }
                catch {
                    throw new COMException(@"Unknown object context");
                }
            //return COMError.S_OK;
        }
 



Если кто сталкивался с подобным или есть идеи правильного освобождения в 8ке AppDispatch помогите
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Внешние компоненты .net 7/8
Ответ #1 - 19. Октября 2010 :: 10:22
Печать  
Для 7.7 AddRef нужен, для 8.х - нет.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
ku3mich
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 4
Зарегистрирован: 19. Октября 2010
Re: Внешние компоненты .net 7/8
Ответ #2 - 19. Октября 2010 :: 10:43
Печать  
в 7ке без addref все работает а вот в 8ке нет (7 релиз 27) 8ки две разные 81 и 82
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Внешние компоненты .net 7/8
Ответ #3 - 19. Октября 2010 :: 11:09
Печать  
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
ku3mich
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 4
Зарегистрирован: 19. Октября 2010
Re: Внешние компоненты .net 7/8
Ответ #4 - 19. Октября 2010 :: 11:36
Печать  
читал - человек не мог получить AppDispatch а я его получаю он работает только 1с-ка остается в памяти после завершения
  
Наверх
 
IP записан
 
ku3mich
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 4
Зарегистрирован: 19. Октября 2010
Re: Внешние компоненты .net 7/8
Ответ #5 - 19. Октября 2010 :: 14:26
Печать  
вот подсоветовали ... не помогло

Код
Выбрать все
[DllImport("ole32.dll")]
static extern void CoFreeUnusedLibraries();
 


Задушим тварь...

Код
Выбрать все
		    if (form1C != null)
		    {

			  Marshal.ReleaseComObject(obj1C);
			  obj1C = null;
			  CoFreeUnusedLibraries();

			  GC.Collect();
			  GC.WaitForPendingFinalizers();
		    }
 

  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать