Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: проблема с памятью Добавлено: 24.08.06 14:23  

Автор вопроса:  Екатерина
VB Net
Есть exe, вызывает Excel, открывает книги.
Public WithEvents oExcel As Excel.Application
Public MyNewBook As Object
Private WithEvents oWorkSheet As Excel.Worksheet
tExcelObj = Type.GetTypeFromProgID("Excel.Application")
oExcel = Activator.CreateInstance(tExcelObj)

Потом вызывает dll - туда передает книги
MyDll = New MyDll.Class1
Public oExcClass As Object
Public MyDllNewBook As Object
MyDll.oExcClass = System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application")
и в функции dll по имени книги обновляю переменную
MyDllNewBook = oExcClNorm.Workbooks(NameBook)

 После всей отработки убиваю dll b pfxbof. t` gthtvtyyst
System.Runtime.InteropServices.Marshal.ReleaseComObject(oExcClass)
System.Runtime.InteropServices.Marshal.ReleaseComObject(MyDllNewBook)

и далее из exe пытаюсь закрыть книги

Do While oExcel.Workbooks.Count <> 0
 Try
  System.Runtime.InteropServices.Marshal.ReleaseComObject(oExcel.Workbooks(1))
   oExcel.Workbooks(1).Saved = True
   oExcel.Workbooks(1).Close()
   Catch err As Exception
   '''err.Message =
   Finally
     GC.Collect()
   End Try
Loop

при этом книги не закрываются и
'''err.Message = "Ошибка на сервере"

Помогите....

Ответить

  Ответы Всего ответов: 4  

Номер ответа: 1
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #1
Добавлено: 25.08.06 09:22
?

Ответить

Номер ответа: 2
Автор ответа:
 Екатерина



Вопросов: 23
Ответов: 25
 Профиль | | #2 Добавлено: 28.08.06 13:38
Что-то не понятно?

Ответить

Номер ответа: 3
Автор ответа:
 Neco



ICQ: 247906854 

Вопросов: 133
Ответов: 882
 Web-сайт: neco.pisem.net
 Профиль | | #3
Добавлено: 04.09.06 20:46
MyDll.oExcClass = System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application";)

Я вот эту строку не вполне понял - это типа передача объекта в библиотеку? А библия комовская что ли? Почему просто объект не передать?

MyDllNewBook = oExcClNorm.Workbooks(NameBook)

А этот если этот кусок из dll, то откуда переменная MyDllNewBook

System.Runtime.InteropServices.Marshal.ReleaseComObject(oExcClass)
System.Runtime.InteropServices.Marshal.ReleaseComObject(MyDllNewBook)

А при убийстве библиотеки там случаем не уничтожаются объекты?

А не попробовать ли использовать чисто комовские библии для работы с экселем (через CreateObject - как в VBScript)?
А нельзя ли вообще обойтись самым простейшим способом формирования экселевских файлов - обычные текстовые файлы, где через табуляцию указываешь столбцы, а через Enter'ы - строки?

Ответить

Номер ответа: 4
Автор ответа:
 Екатерина



Вопросов: 23
Ответов: 25
 Профиль | | #4 Добавлено: 15.09.06 14:04
К сожалению Excel необходим.
Public MyDllNewBook As Object
 - объявлена в библотеке
перед тем как убить библотеку
в её функции пытаюсь убить объекты
  Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
        If disposing Then
            If Not (components Is Nothing) Then
                components.Dispose()
            End If

            For k = 1 To ClSheet.Count
            ' ClSheet - класс где есть переменная
            ' Public MySheet As Excel.Worksheet
                ClSheet(1).MyFinalize()
                'теперь убила? If Not Me.MySheet Is Nothing Then Me.MySheet = Nothing
                ClSheet.Remove(1)
            Next k
            ClSheet = Nothing
            
            If Not MyFNewBook Is Nothing Then System.Runtime.InteropServices.Marshal.ReleaseComObject(MyFNewBook)
            MyFNewBook = Nothing
            If Not MyNewCells Is Nothing Then System.Runtime.InteropServices.Marshal.ReleaseComObject(MyNewCells)
            MyNewCells = Nothing
            If Not oExcelMyF Is Nothing Then System.Runtime.InteropServices.Marshal.ReleaseComObject(oExcelMyF)
            oExcelMyF = Nothing
            MyGui = Nothing
        End If
        MyBase.Dispose(disposing)
    End Sub

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам